8.NSNumber (p336)
基本数据类型是无法存储在数组之类的集合中,所以在Foundation框架有一个专门处理各种数据类型的类,就是NSNumber,NSNumber其实是一个抽象类,负责封装一些数据对象,提供一些处理方法。
当数组存入一些NSNumber对象后,直接打印数组会发现输出的是那些NSNumber对象的值而并不是他们在内存中的地址。这说明了NSNumber类有自定义的description方法实现,而不是直接使用NSObject的方法。
9.区块的使用 (p356)
苹果公司加入的Block,同样他们也推荐使用Block,在很多方法中都可以使用区块来提升程序的性能。
比如排序时的比较方法,有两个Obj,比较按照他们名字进行比较,如果你已经写了一个compareName方法,那么就不要再在区块里调用了:
[array sortUsingComparator:
^(id obj1, id obj2) {
return [obj1 compareName: obj2];
}];
这样虽然能够运行,但是并没有提升性能,更好的方法是在区块中做更多的动作,才能使性能得到提升:
[array sortUsingComparator:
^(id obj1, id obj2) {
return [obj1.name compare: obj2.name];
}];
10.强变量 (p413)
自动引用计数(ARC)无疑是给开发者省下了很多气力在手工引用计数上。但是也有一些问题,比如说retain循环问题。
比如在一个父子视图中,父视图持有子视图的引用,同时子视图也持有父视图的引用。这种循环会引起问题。例如当父视图销毁时会如何处理。子视图对父视图的引用不再有效。实际上,视图引用到不存在的父视图会引起应用的崩溃。
所以就会有强引用,弱引用的诞生。
所有的对象变量默认都是强变量的,不需要先声明。
所有属性则不是,默认相当于assign,你可以为属性声明为strong,或者weak。