Effective Objective-C chapter-1

原创 2017年04月19日 12:08:47

熟悉 Objective-C

  1. Objective-C 通过一套全新的语法,在 C 语言的基础上添加了面向对象的特性。
  2. Objective-C 使用消息结构,由 Smalltalk 语言演化而来。
  3. 消息结构和函数调用的区别在于:使用消息结构的语言,其运行时所执行的代码由运行环境所决定;而使用函数调用的语言,则由编译器所决定。消息结构在运行时才回去查找所要执行的方法,编译器也不关心接收消息的对象是何种类型,在运行期才会去检查对象类型,这个过程称为“动态绑定”。
  4. Objective-C 的重要工作都是由“运行期组件”而非编译器来完成。使用 Objective-C 的面向对象特性所需的全部数据结构及函数都在运行期组件里面。运行期组件本质上是一种与开发者所编写代码相链接的“动态库”,其代码能把开发者所编写的所有程序粘合起来。
  5. Objective-C 的指针都是用来指示对象的,所有 Objective-C 语言的对象都必须使用指针来声明,对象所占的内存总是分配在“堆空间(heap space)”中,不能再栈中分配 Objective-C 对象,而对象的指针则是在栈中分配。分配在堆中的内存必须直接管理,而分配在栈上用于保存指针变量的内存会在其栈帧弹出时自动清理。
  6. Objective-C 将堆内存管理抽象了出来,不需要手动的 malloc 或者 free ,Objective-C 运行期环境将这一部分工作抽象为一套内存管理架构,名为“引用计数”

少引入头文件

  1. 在头文件中尽量使用“向前声明” ,在实现文件中在引入对应的头文件。将引入头文件的实际尽量延后,只有在确有需要的时候再去引入。
  2. 如果写的某个类继承自某个超类,则必须引入那个超类文件。同理,如果声明要写的类遵从某个协议(protocol),那么该协议也必须要有完整的定义,且不能使用向前声明。向前声明只能告诉编译器有某个协议,但是此时编译器需要知道该协议中的定义的方法。
  3. 委托协议(delegate protocol)则不需要单独写一个类,委托协议只有在与接受委托的类放在一起定义才有意义,此时最好能在实现文件中声明此类实现了该委托协议,并把这段实现代码放在“class-continuation”分类里。这样的话,只需要在实现文件中引入包含委托协议的头文件即可。否则,被外部引入的协议要单独放在一个文件中,然后再引入。

多用字面量语法

  1. 应该是要字面量语法来创建字符串,数值,数组,字典。
  2. 应该通过取下标操作来访问数组下标或字典中的键所对应的元素。
  3. 用字面量语法创建数组或字典时,若值中有 nil,则会抛出异常,务必确保值不为 nil。

多用类型常量,少用#define 预处理命令

  1. 类型常量的命名法是:如果常量局限于某“编译单元(也就是实现文件)”之内,则在变量前面加上 k,如果常量在类文件之外可见,则通常以类名作为前缀。
  2. 定义常量的位置,如果不打算公开某个常量,则应该将其定义在使用该变量的实现文件中。变量一定要同时使用 static 和 const 来声明,static 修饰符意味着变量的编译单元内可见,const 表示值不可变。
  3. 定义外部可见的全局常量的方法是:头文件中的声明方式extern NSString *const **,实现文件的定义方式 extern *const ** = @"*",这是在头文件中声明,在实现文件中定义。这类常量必须要定义,而且只能定义一次。

用枚举表示状态,选项,状态码

  1. 应该用枚举来表示状态机的状态、传递给方法的选项以及状态码的值,给这些值取个易懂的名字。
  2. 如果把传递给某个方法的选项表示为枚举类型,而多个选项又同时可用,那么就将各个选项的值定义为2的幂,一遍通过按位或操作将其组合起来
  3. 使用 NS_ENUM 与 NS_OPTIONS 宏来定义枚举类型,并指明其底层数据类型。这样做可以确保枚举是用开发者所选的底层数据类型实现出来的,而不会采用编译器所选择的类型。
  4. 在处理枚举类型的 switch 语句中不要实现 default 分支,这样的话,加入新的枚举之后,编译器就会及时提醒开发者还有没有实现的枚举分支。

编写高质量的iOS代码--Effective Objective-C 2.0 读书笔记

编写高质量的iOS代码--Effective Objective-C 2.0 读书笔记 这本书年初刷完,感觉不错,介绍了很多小点,都是平日不怎么关注的. 第1章 熟悉Objective-C...
  • uxyheaven
  • uxyheaven
  • 2014年12月26日 23:56
  • 5050

Effective Objective-C 2.0 读书笔记

第 1 章 熟悉 Objective-C 第 2 章 对象消息运行时 第 3 章 接口和 API 设计 第 4 章 协议与分类 第 5 章 内存管理 循环引用 普通的两个变量互相引用 Block 循环...
  • xsl_bj
  • xsl_bj
  • 2016年06月06日 12:27
  • 4768

【Effective Objective-C 2.0读书笔记】第三章:接口和API设计

一旦你完成了一个应用,你可能会希望在以后的工程中重用部分代码。你也可能会发布一些代码以供其他人来使用。这意味着你需要使用Objective-C的范式和理解众多的陷阱。...
  • freeWayWalker
  • freeWayWalker
  • 2015年07月06日 15:23
  • 592

Effective Objective-C 2.0 编写高质量iOS与OS X代码 objc_msgSend 的作用

1. 消息由接收者、选择子及参数构成。给某对象“发送消息”(invoke a message)也就相当于在该对象上“调用方法”(call a method); 2. 发给某对象的全部消息都由...
  • mad2man
  • mad2man
  • 2014年03月27日 16:15
  • 2939

iOS-Effective Objective-C 2.0 读书笔记(三)

第三章的内容主要是说接口和API设计相关的注意事项。比如说我们自己写的代码需要设计以便于代码复用时,应该注意的一些问题包括哪些。简单总结  有些注意事项实际上很简单,而且很常见,我觉得并不需要太长篇幅...
  • linyousong
  • linyousong
  • 2016年04月29日 22:31
  • 413

阅读《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》总结

第1条:了解Objective-C语言的起源 Objective-C为C语言添加了面向对象特性,是其超集。Objective-C使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型。接收一...
  • caojengineer
  • caojengineer
  • 2015年06月07日 22:52
  • 1183

《Effective Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法》读书笔记(下)

1.为避免在不经意间使用了无效对象,一般在release之后会清空指针,=nil; 2.通常利用弱引用或者“手动”解除引用的方式破坏循环引用。 3.ARC下,规定以alloc、new、copy、mut...
  • zhaochen_009
  • zhaochen_009
  • 2017年04月06日 10:44
  • 326

《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》 笔记1

NSString *someString = @"The string";   NSString *anotherString = someString;  描述了此时的内存布局。存放在N...
  • ssyyjj88
  • ssyyjj88
  • 2016年04月13日 14:51
  • 190

《Effective Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法》读书笔记(上)

1.OC对象所占内存总是分配在"堆"中,而绝不会分配在"栈"中,不能再栈中分配OC对象。"栈"中对象借助栈帧进行维护,"堆"中对象的管理借助引用计数机制. -(NSMutableArray *)te...
  • zhaochen_009
  • zhaochen_009
  • 2017年04月05日 10:10
  • 291

《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》--读书笔记

个人觉得这本书很不错!里面有很多很实用但以前没有太注意的地方,所以想纪录下来,当作自己的读书笔记吧。 熟悉Objective-C 1)Objective-C语言使用“消息结构”而不是“函数调用”。O...
  • weimeng809
  • weimeng809
  • 2016年01月11日 00:18
  • 585
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Effective Objective-C chapter-1
举报原因:
原因补充:

(最多只允许输入30个字)