独角兽企业重金招聘Python工程师标准>>>
这本书很早有了解过,评价都不错,但最近才终于把这本书看完,整本书介绍了很多个提高Objective-C的方法,都是平时用得很多但是没有注意使用的,下面对这些方法做一些小总结。
第1章 熟悉Objective-C
第1条:了解Objective-C语言的起源
Objective-C为C语言添加了面向对象特性,是其超集。Objective-C使用动态绑定的消息结构,运行时才决定执行何种代码
第2条:在类的头文件中尽量少引入其他头文件
减少头文件的引入,多使用声明提及别的类
第3条:多用字面量语法,少用与之等价的方法
第4条:多用类型常量,少用#define预处理指令
在头文件中使用extern来声明全局变量,并在相关实现文件中定义其值
第5条:用枚举表示状态、选项、状态码
应该用枚举来表示状态机的状态、传递给方法的选项以及状态码等值,代码中少用基本数据类型表示状态选项等
第2章 对象、消息、运行期
第6条:理解"属性"这一概念
多用属性来定义对象中的数据变量,属性: 变量 + 方法 + 属性特质
第7条:在对象内部尽量直接访问实例变量
在dealloc方法中,总是应该直接通过实例变量来读写数据。
第8条:理解"对象等同性"这一概念
对象判断可以使用哈希码判断
第9条:以"类族模式"隐藏实现细节
类族模式编写公共接口
第10条:在既有类中使用关联对象存放自定义数据
类别里加属性
第11条:理解objc_msgSend的作用
动态消息派发系统
第12条:理解消息转发机制
标准消息转发: runtime发送 methodSignatureForSelector:, 消息获取Selector对应的方法签名. 返回值非空则通过forwardInvocation: 转发消息,返回值为空则向当前对象发送doesNotRecognizeSelector: 程序崩溃退出
第13条:用"方法调配技术"调试"黑盒方法"
就是method swizzling啦,不是很推荐滥用.
第14条:理解"类对象"的用意
区分类和对象
第3章 接口与API设计
第15条:用前缀避免命名空间冲突
Apple宣称其保留使用所有“两字母前缀”(two-letter prefix)的权利,所以我们加的前缀最好三个字母为宜。
第16条:提供"全能初始化方法"
如果超类的初始方法不适用与子类,那么应该重写这个超类的方法,并在其中抛出异常。
第17条:实现description方法
自定义返回一个有意义的字符串。
第18条:尽量使用不可变对象
readonly属性限制外部修改属性
第19条:使用清晰而协调的命名方式
方法名里不要使用缩略后的类型名称
第20条:为私有方法名加前缀
不要单用一个下横线做私有方法的前缀,父类很可能已经使用
第21条:理解Objective-C错误模型
适当时候在代码抛出异常
第22条:理解NSCopying协议
第4章 协议与分类
第23条:通过委托与数据源协议进行对象间通信
第24条:将类的实现代码分散到便于管理的数个分类之中
第25条:总是为第三方类的分类名称加前缀
第26条:勿在分类中声明属性
第27条:使用"class-continuation分类"隐藏实现细节
第28条:通过协议提供匿名对象
第5章 内存管理
第29条:理解引用计数
内存管理的三种基本方式之一
第30条:以ARC简化引用计数
用ARC让编程更加简洁,CoreFoundation对象不归ARC管理,必须适时调用CFRetain/CFRelease
第31条:在dealloc方法中只释放引用并解除监听
执行异步任务的方法不应在dealloc里调用
第32条:编写"异常安全代码"时留意内存管理问题
使用try时要记得清理对象,try会降低运行效率,真的遇到异常情况的时候,应该检查代码,而不是盲目使用try。
第33条:以弱引用避免保留环
将某些引用设为weak,可避免循环引用
第34条:以"自动释放池块"降低内存峰值
某些循环语句中可以用到,减低内存峰值
第35条:用"僵尸对象"调试内存管理问题
第36条:不要使用retainCount
ARC下retainCount已经废止
第6章 块与大中枢派发
第37条:理解"块"这一概念
第38条:为常用的块类型创建typedef
第39条:用handler块降低代码分散程度
第40条:用块引用其所属对象时不要出现保留环
循环应用问题
第41条:多用派发队列,少用同步锁
派发队列更简单高效
第42条:多用GCD,少用performSelector系列方法
执行异步线程任务GCD机制更优
第43条:掌握GCD及操作队列的使用时机
第44条:通过Dispatch Group机制,根据系统资源状况来执行任务
第45条:使用dispatch_once来执行只需运行一次的线程安全代码
第46条:不要使用dispatch_get_current_queue
ispatch_get_current_queue主要用于解决由不可重入的代码引起的死锁
第7章 系统框架
第47条:熟悉系统框架
第48条:多用块枚举,少用for循环
最新、最先进的方式
第49条:对自定义其内存管理语义的collection使用无缝桥接
第50条:构建缓存时选用NSCache而非NSDictionary
NSCache提供自动删减功能,线程安全,不会拷贝键
第51条:精简initialize与load的实现代码
load的方法不参与覆写机制,在类加载的时候只调用一次
第52条:别忘了NSTimer会保留其目标对象
用block来打破NSTimer引起的循环引用