一、 属性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]让僵尸对象起死复生。

 

posted on 2015-12-22 10:48  fatal-奚山遇白  阅读(234)  评论(0编辑  收藏  举报