Effective Objective-C 2.0 读书笔记1

第一条:了解Objective-C的语言起源

消息结构和函数调用的区别:使用消息结构的语言,其运行时所执行的代码由运行环境来决定;使用函数调用的语言,则由编译器决定。如果范例代码中调用的函数是多态的,那么在运行时就要按照“虚函数表”来查出到底应该执行那个函数实现。而采用消息结构的语言,不论是否多态,总是在运行时才会查找所要执行的方法。实际上,编译器甚至不关心接收消息的对象是何种类型。接收消息的对象问题也要在运行时处理,其过程叫做“动态绑定”。

Objective-C的重要工作都由“运行期组件”而非编译器来完成。使用Objective-C的面向对象特性所需的全部数据结构及函数都在运行期组件里面。

第二条:在类的头文件中尽量少引入其他头文件

除非确有必要,否则不要引入头文件。一般来说,应在某个类的头文件中使用前项声明来提及别的类,并在实现文件中引入那些类的头文件。这样做可以尽量降低类的耦合。

有时无法使用前项声明,比如要声明某个类遵循一项协议。这种情况下,尽量把“该类遵循某项协议”的这条声明移至“class-continuation 分类”中。如果不行的话,就把协议单独放在一个头文件中。然后将其引入。

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

NSString *something = @"xxxx";

如果不使用这种语法的话,就要以常见的alloc init的方法来创建并分配初始化NSString对象。

字面数值:

NSNumber *someNumber = @1;

字面数组:

一般这样来创建数组:

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

使用字面量语法来创建则是:

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

字面量字典

NSDictionary *personData = [NSDictionary dictionaryWithObjectsAndKeys:

@"Matt", @"firstName",

@"Galloway", @"lastName",

[NSNumber numberWithInt28], @"age", nil];

字面语法:

NSDictionary *personData = @{@"firstName" : @"Matt",

@"lastName" : @"Galloway",

@"age": @28};

按照特定键访问其值的传统做法是:

NSString *lastName = [personData objectForKey@"lastName"];

与之等效的字面量语法则是:

NSString *lastName = personData[@"lastName"]

要点:

1)应该使用字面量语法来创建字符串,数值,数组,字典

2)应该通过取下标操作来访问数组下标或字典中的键所对应的元素

3)用字面量语法创建数组或字典时,若值中有nil, 则会抛出异常。因此,务必确保值里不含nil.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容