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

Posted 码出境界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3多用字面量语法,少用与之等价的方法相关的知识,希望对你有一定的参考价值。

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。这么做会多调一个方法,而且还要再创建一个对象,不过使用字面量语法所带来的好处还是多于上述缺点的。
 

以上是关于3多用字面量语法,少用与之等价的方法的主要内容,如果未能解决你的问题,请参考以下文章

编写OC高质量的代码的有效方法

ES6新语法之---对象字面量扩展模板字符串

一些写代码的常见规范

JS语法回顾

字面量和构造函数

LiveScript 字面量