assign,retain,copy,weak,strong,readonly,nonatomic ,atomic 8个属性的特征

来源:互联网 发布:spss手机版软件 编辑:程序博客网 时间:2024/06/06 17:58

1.assign 

是简单的值传递,没有retaincount.对于基础数据类型和C数据类型,id等非指针类型用这个。

2.retain

释放之前的对象(指针清空),再指定新的指针地址,同时 retainCount+1.

-(void) setName:(NSString *) newName {

  if(name!=newName) {

[name release]; /指针清空

name = [newName retain];

    }

}

3.copy 

针对NSString使用,确保不受NSMutableString 影响。

4.weak

需要在启动ARC的情况下使用,和 assign 相同,但是也有一点不同之处。

5.strong

相当与retain

6.readonly与readwrite

没有setter。不能赋值。readwrite 既有read 又有write。

7.nonatomic

非安全性访问,效率高。一般用这个。

8.atomic

访问器是原子操作,在多线程环境下安全访问属性。

说明:

默认所有实例变量和局部变量都是Strong指针。

声明IBOutlet 一般用weak.

什么是野指针。当使用weak时,retainCount 没有加1.或者说对象的所有者数量没有改变

当所有者没有了,对象会被清空。对于weak 声明的这个指针指向的是地址将重置为nil.

而如果是assign 则需要手动设置为nil,否则将产生野指针。

这就是weak 和 assign 的一点点区别。

delegate 通常也是weak属性。          

通常viewController 拥有 通用类,譬如UITabelView 之类的。而在通用类中具有协议属性,这个属性声明是weak,并且指向了

viewController.                                                                                                                                                                                              





0 0
原创粉丝点击