寒哥管理的技术专题work我的iOS开发小屋

关于Effective Objective-C 这本书一些有趣的

2017-06-16  本文已影响1172人  pengxuyuan

前言

前段时间把Effective Objective-C 这本书慢慢的看了下,记录每章一些需要注意的知识点。说实话,这本书籍写的真的是经典,我感觉过段时间还得细读一遍。

目前对于每章的记录,有点类似流水账,就是粗略的记录知识点,方便快速浏览,希望过段时间可以慢慢思考每章每个知识点。

Effective Objective-C 2.0 总结(一)

Effective Objective-C 2.0 总结(二)

Effective Objective-C 2.0 总结(三)

Effective Objective-C 2.0 总结(四)

Effective Objective-C 2.0 总结(五)

Effective Objective-C 2.0 总结(六)

Effective Objective-C 2.0 总结(七)

正文

这里记录下在读这本书一些有趣的东西,可以在平时编码的时候注意

利用@class 向前声明 来解决两个类相互引用的问题

A 类中有B 类的属性,B 类中也有A 类的属性;在这种情况下,我们用import、include 都是不能解决的,用@class 就可以完美解决这个问题,而且用@class 还可以减少对其他类的依赖,减少链接其他类所需要的时间,从而降低编译时间

读取实例变量的时候采用直接访问的形式,而在设置实例变量的时候通过属性来做

通过属性来访问其实就调用set/get 方法,用实例变量来访问其实就是利用指针直接操作,这样子不用经过Objective-C 的 “方法派发” 步骤,这样子速度会比较快= =

Cocoa 中大部分collection 类都是类族

类族使用 “工厂模式”,调用抽象基类方法返回子类实例,这样子可以隐藏子类实现的细节,但是要注意,我们这样子用基类生成的实例,很有可能并不是基类的实例而是子类的实例,这个时候我们要弄清楚这两个方法的区别

-(BOOL) isKindOfClass: classObj; 判断是否是这个类或者这个类的子类的实例
-(BOOL) isMemberOfClass: classObj; 判断是否是这个类的实例

关于 “协议” 可选方法的判断

在实现委托模式和数据源模式的时,协议中的方法是可选的,我们就会写出大量这种判断代码:

if([_delegate respondsToSelector:@selector(networkFetcher:didRecevieData:)]){
    [_delegate networkFetcher:self didRecevieData:data];
}

位段,C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或称“位域”( bit field) 。

struct data {

​ unsigned int filedA : 8;

​ unsigned int filedB : 4;

​ unsigned int filedC : 2;

​ unsigned int filedD : 1;

}

filedA 位段占用8个二进制位,filedB 位段占用4个二进制位,filedC 位段占用2个二进制位,filedD位段占用1个二进制位。filedA 就可以表示0至255之间的值,而filedD 则可以表示0或1这两个值。

我们可以像filedD 这样子,创建大小只有1的位段,这样子就可以把Boolean 值塞入这一小块数据里面,这里很适合这样子做。

使用atomic 特质来修饰属性,来保证其原子性 但是不代表是线程安全的

属性是开发者经常需要同步的地方,可以使用atomic 特质来修饰属性,来保证其原子性,每次肯定可以从中获取到有效值,然而在同一个线程上多次调用获取方法(getter),每次获取到结果未必相同,在两次访问操作之间,其他线程可能会写入新的属性值。

使用 “串行同步队列”,将读取操作及写入操作都安排在同一个队列里,即可保证数据同步。

对于NSTimer 设置tolerance 这个偏差时间 可以提高性能

最后

这次看完,感觉对很多知识点都了解的不深,很多原理性的东西完全不懂,还是得多加把劲呀。

最后,还是推荐大家去看原著 少数优秀的Objective-C 书籍之一 = =

努力,奋斗!

上一篇下一篇

猜你喜欢

热点阅读