程序员iOS Developer

《Effective Objective-C 2.0》读书笔记(

2017-12-07  本文已影响169人  习惯有你syh
1、了解Objective-C的起源
2、在类的头文件中尽量少引入其他文件
3、多用字面量语法,少用与之等价的方法
//① 使用方法
NSNumber *someNumber = [NSNumber numberWithInt:1];

//②使用字面量
NSNumber *intNumber = @1;
NSNumber *floatNumber = @2.5f;
NSNumber *boolNumber = @YES;
......

以上定义两种定义推荐使用第二种,这样做可以令NSNumber对象变得整洁。以下定义方式同理。

//①使用NSArray类方法
NSArray *animals = [NSArray arrayWithObjects:@"cat", @"dog", @"mouse", @"badger", nil];

//②使用字面量
NSArray *animals = @[@"cat", @"dog", @"mouse", @"badger"];

//从数组中取值
//①使用objectAtIndex
NSString *dog = [animals objectAtIndex: 1];

//②使用字面量
NSString *dog = animals[1];

下面代码分别以两种语法创建数组:

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

//①使用NSArray类方法
NSArray *arrayA = [NSArray arrayWithObjects:object1, object2, object3, nil];

//②使用字面量
NSArray *arrayB = @[object1, object2, object3];

如果object1和object3都指向了有效的Objective-C对象,而object2是nil。按字面量语法创建数组arrayB时会抛出异常。arrayA虽然能创建出来,但是其中却只包含object1一个对象。原因在于,“arrayWithObjects:”方法会依次处理各个参数,知道发现nil为止。这个差别表明,使用字面量语法更为安全。

//这样写的顺序是<对象>,<键>,<对象>,<键>。这很不容易理解。
NSDictionary *personData = [NSDictionary dictionaryWithObjectsAndKeys:@"Matt", @"firstName", @"Galloway", @"lastName", [NSNumber numberWithInt:28], @"age", nil];

//使用字面量语法,就一目了然了
NSDictionary *personData = @{
                                 @"firstName" : @"Matt",
                                 @"lastName" : @"Galloway",
                                 @"age" : @28
                                 };

与数组一样,用字面量语法创建字典时也有个问题,那就是一旦有值为nil,便会抛出异常。
取值时也推荐使用字面量语法

NSString *fisrstName = personData[@"firstName"];
字面量语法的局限性
NSMutableArray *mutable = [@[@1, @2, @3, @4, @5] mutableCopy];
//这么做会多调用一个方法,而且还要再创建一个对象,不过使用字面量语法所带来的好处还是要多余上述缺点的
4、多用类型常量,少用#define预处理指令

比我们需要定义一个固定的动画时间,用#define预处理指令可以这样写:

#define ANIMATION_DURATION 0.3

预处理过程中会把碰到的所有ANIMATION_DURATION一律替换成0.3,这样的话,假设此指令声明在某个头文件中,那么所有引入 了这个头文件的代码,其//ANIMATION_DURATION都会被替换。
要想解决此问题,应该设法利用编译器的某些特性才对。有个办法比用预处理指令来定义常量更好。比方说:

//此方式定义的常量包含类型信息,其好处是清楚地描述了常量的含义。由此可知该常量类型为NSTimeInterval,这有助于编写开发文档
static const NSTimeInterval kAnimationDuration = 0.3;
5、用枚举表示状态、选项、状态吗
以上为《Effective Objective-C2.0》第一章内容。
上一篇 下一篇

猜你喜欢

热点阅读