一、 属性readwrite,readonly,assign,retain,copy,nonatomic 等各是什么作用,在那种情况下用?
1> readwrite:同时生成get方法和set方法的声明和实现
2> readonly:只生成get方法的声明和实现
3> assign:set方法的实现是直接赋值,用于基本数据类型
4> retain:set方法的实现是release旧值,retain新值,用于OC对象类型
5> copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型
6> nonatomic:非原子性,set方法的实现不加锁(比atomic性能高)
7> strong:强指针类型,用于对象类型
8> weak:弱指针类型,用于对象类型
二、最需注意strong/weak类型
1> strong:在对象有存在必要的时候必须保证至少有一个强指针指向它,否则会引起野指针错误
2> weak:一般通过.xib脱线产生的控件会自动声明为weak类型,因为在.xib中的View中已经有一个强指针指向该控件,只要该View存在,控件就有强指针指向不会消亡
补充:
野指针错误:访问了一块坏的内存(已经被回收的,不可用的内存)。
内存泄露:内存没有被回收,但已经没有指针指向该内存,外界无法在访问该内存从而造成泄漏。(在ARC环境下也要担心内存泄露的问题)
僵尸对象():所占内存已经被回收的对象,僵尸对象不能再被使用。(打开僵尸对象检测)
空指针:没有指向任何东西的指针(存储的东西是0,null,nil),给空指针发送消息不会报错
注意:不能使用[p retaion]让僵尸对象起死复生。