• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Effective Objective-C 2.0 — 第三条:多用字面量语法,少用与之等价的方法 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

第三条:多用字面量语法,少用与之等价的方法

几个类:NSString  NSNumber  NSArray  NSDictionary 

字面量语法是一种语法糖(syntactic sugar)

NSString *someString = @"字符串字面量";

字面量数值:

NSNumber *someNumber = @1;   等价与   NSNumber *someNumber = [NSNumber numberWithInt:1];

NSNumber *intNumber = @1;

int x = 5;

NSNumber *expressionNumber = @(x * y);

字面量数组:

如果不用字面量:NSArray *animals = [NSArray arrayWithObjects:@"cat", @"dog", @"mouse", @"badger", nil];

使用字面量语法:

NSArray *animals = @[@"cat", @"dog", @"mouse", @"badger"];

//!若数组元素对象中有nil,使用字面量语法创建数组会抛出异常,语法糖效果等于先创建了一个数组,然后把方括号内的所有对象都加到这个数组中,抛出异常为:

'NSInavalidArgumentException' , reason:'.....attempt to insert nil object from objects[0]'

取某个下标对应的对象:(subscripting)

   不用字面量:

        NSString *dog = [animals objectAtIndex:1];

   使用字面量:

        NSString *dog = animals[1];

使用两种方法创建数组,其中object2为nil

id object1 = /*...*/;      id object2 = /*....*/;     id object3 = /*...*/;

NSArray *arrayA = [NSArray arrayWithObjects:object1, object2, object3, nil];

NSArray *arrayB = @[object1, object2, object3];

分析:arrayA只能创建object1 对象来,因为“arrayWithObject:“方法遇到nil会结束

     arrayB会抛出异常,so使用字面量语法更为安全,可以发现错误

字面量字典

  Dictionary ,映射型数据结构,键值对

NSDictionary *personData = [NSDictionarydictionaryWithObjectsAndKeys:

                @"Matt", @"firstName", 

                @"Galloway", @"lastName", 

                [NSNumber numberWithInt:28], @"age",   

                 nil];

顺序是 《对象》,《键》 与

通常理解为 把“键”映射到“对象”,相反

字面量:  NSDictionary *personData = @{@"firstName" : @"Matt",

                       @"lastName" : @"Galloway",

                     @"age" : @28};

28区别原因:字典中的对象和键必须都是Objective-C对象,所以不能把28直接放进去,而要封装在NSNumber实例中才行

由键访问其值 : 不用字面量: NSString *lastNamge = [personData objectForKey:@"lastName"];

        使用字面量:NSString *lastName = personData[@"lastName"];

可变数组与字典:

修改可变数组与字典内容的标准做法是:

  [mutableArray replaceObjectAtIndex:1 withObject:@"dog"];

  [mutableDictionary setObject:@"Galloway"forKey:@"lastName"];

换成去下标:

  mutableArray[1] = @"dog";

  mutableDictionary[@"lastName"] = @"Galloway";

 

局限性:

  除了字符串以外,所创建出来的对象必须属于Foundation框架。

  使用字面量语法创建出来的字符串、数组、字典对象都是不可变的(immutable)   

  想要可变版本的对象,需复制一份:NSMutableArray *mutable = [@[@1, @2, @3]mutableCopy];  

                 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap