[size=10.5000pt]1. 深复制和浅复制 浅复制只是复制了指向对象的指针,深复制是复制了一个完全相同的独立对象。 浅复制好比人和影子,人完蛋后影子也不存在了; 深复制好比人和克隆人,人完蛋后克隆人照常或者。 [size=10.5000pt]2. 强指针和弱指针 在ARC中引入了强指针和弱指针 weak:代理和UI控件使用弱指针 Strong:其他OC对象使用强指针 在非ARC中strong就相当于retain [size=10.5000pt]3. 野指针和僵尸对象 僵尸对象:内存已经被回收的对象,僵尸对象不能再被使用 野指针:指向僵尸对象的指针,给野指针发送消息会报错 [size=10.5000pt]4. 代理 A想完成某事,但不愿自己去做。那么将要做的事也就是要实现的方法定义在一个协议中。任何遵守了这个协议的对象都可以成为A的代理。遵守这个协议的代理就要实现协议中的方法。 A拥有一个遵守协议的代理属性。 如果A要完成某事,调用代理的方法即可。 [size=10.5000pt]5. 单例模式 单例模式可以确保一个类只有一个实例对象。目前我所学到的只有 NSFileManager 无论创建多少次,返回的还是同一个对象。 [size=10.5000pt]6. block 跟基本数据类型一样,block也是一种数据类型; block是用于封装代码段 与函数的调用方式一样 [size=10.5000pt]7. release/autorelease 1> release: 手动将OC对象的引用计数器-1; autorelease: autorelease过的对象会放在一个自动释放池中,当自动释放池被销毁时,会对池子中的所有对象做一次release操作。 2> 使用release需要考虑对象被释放的时间,要在对象被释放前对其操作,否则会出现野指针和僵尸对象; 使用autorelease不用再考虑对象被释放的时间,只要在自动释放池中操作对象,都不会出现野指针和僵尸对象。 3> release可以精确控制对象释放的时间,防止占用内存过大,造成程序闪退; autorelease无法精确控制对象释放的时间,如果对象占用内存过大,会造成程序闪退;如果对象内存很小,没有影响。 [size=10.5000pt]8. property 参数 assign:用于非OC对象 retain:用于OC对象 copy:用于NSString和NSMutableString readOnly:只读 readWrite:读写 atomic:原子性,性能低 nonatomic:原子性,性能高 setter = :更改set方法名 getter = :更改get方法名(一般用于bool类型因为bool类型方法名一般以is开头) 循环引用时,一端用retain一端用assign ARC strong:相当于非ARC中的retain,用于其他OC对象 weak:用于代理,UI控件 循环引用时,一端用strong一端用weak [size=10.5000pt]9. 懒加载 防止对象被创建多次占用内存过大影响系统性能,那么重写get方法 用到的时候再去判断对象是否创建,如果没有创建过才去创建新对象。 [size=10.5000pt]10. include和import的区别 import和include都是用于 拷贝文件内容 import可以自动纺织文件被拷贝多次 [size=10.5000pt]11. 条件编译 预处理指令包括宏定义、条件编译和文件包含 条件编译一般用于文件包含中 判断一个宏是否定义,如果没有定义那么定义这个宏,如果已经定义了就不会在拷贝文件。 [size=10.5000pt]12. 内存管理原则 每个对象中都有一个默认的引用计数器,用来表示目前有几个对象在使用这个对象。 dealloc像死者遗言,retain过的对象要在这里做一次release操作,在代码末尾一定要调回super dealloc。
|