多用字面量语法,少用与之等价的方法

1、字面字符串
摒弃:
NSString *someString = [[NSString alloc] initWithString: @"Effective Objective-C 2.0"];
 
提倡:
NSString *someString = @"Effective Objective-C 2.0";
 
2、字面数值
摒弃:
NSNumber *someNumber = [NSNumber numberWithInt: 1];
 
提倡:
NSNumber *intNumber = @1;
NSNumber *floatNumber = @2.5f;
NSNumber *doubleNumber = @3.14159;
NSNumber *boolNumber = @YES;
NSNumber *charNumber = @‘a’;
亦可以
int x = 5;
float y = 6.32f;
NSNumber *expressionNumber = @(x * y);
 
3、字面量数组
摒弃:
NSArray *animals = [NSArray arrayWithObjects: @“cat”, @“dog”, @“mouse”, @“badger”, nil];
NSString *dog = [animals objectAtIndex: 1];
 
提倡:
NSArray *animals = @[@“cat”, @“dog”, @“mouse”, @“badger”];
NSString *dog = animals[1];
 
提示:
“arrayWithObjects:”方法会依次处理各个参数,直到发现nil为止。而字面量语法创建时如果有nil,则会抛出异常。这个微妙的差别表明,使用字面量语法更为安全。抛出异常令应用程序终止执行,这比创建好数组之后才发现元素个数少了要好。
 
4、字面量字典
摒弃:
NSDictionary *personData = [NSDictionary dictionaryWithObjectsAndKeys: @“Matt”, @“firstName”, @“Galloway”, @“lastName”, [NSNumber numberWithInt: 28], @“age”, nil];
 
NSString *lastName = [personData objectForKey: @“lastName"];
 
提倡:
NSDictionary *personData = @{@“firstName” : @“Matt”, @“lastName” : @“Galloway”, @“age” : @28}:
 
NSString *lastName = personData[@“lastName"];
 
提示:
跟字面量数组类似。
 
5、可变数组与字典
摒弃:
[animals replaceObjectAtIndex: 1 withObject: @“dog”];
[personData setObject: @“Jon” forKey: @“lastName”];
 
推荐:
animals[1] = @“dog";
personData[@“lastName”] = @“Jon”;
 
6、局限性
字面量语法有个小小的限制,就是除字符串之外,所创建出来的对象必须属于Foundation框架才行。如果自定义了这些类的子类,则无法用字面量语法创建其对象。要创建自定义子类的实例,必须采用“非字面量语法”。然而,由于NSArray、NSDictionary、NSNumber都是业已定型的“子类”,因此很少有人会从其中自定义子类,真要这样做也比较麻烦。而且一般来说,标准的实现已经很好了,无须再改动。
创建字符串时可以使用自定义的子类,然而必须要修改编译器的选项才行。除非你明白这样做的后果,否则不鼓励使用此选项,用NSString就足够了。
使用字面量语法创建出来的字符串、数组、字典对象都是不可变的。若想要可变版本的对象,则需要复制一份mutableCopy。这么做会多调一个方法,而且还要再创建一个对象,不过使用字面量语法所带来的好处还是多于上述缺点的。
 

转载于:https://www.cnblogs.com/cchHers/p/6931171.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值