iOS 开发 property,strong,weak,retain,assign,copy,nomatic 的区分与动

1:ARC环境下,strong代替retain.weak代替assign,xcode 4.2(ios sdk4.3同以下版本)和事先的本子用的是retain和assign,是未支持ARC的。xcode 4.3(ios5暨上述版本)之后虽有了ARC,并且开始运用 strong与weak

2:weak的来意:在ARC环境下,所有对这目标的weak指针都以为置为nil。这个T特性很有因此,相信广大开发者都让指针指向已经放出的对象所导致的EXC_BAD_ACCESS困扰了,使用ARC以后,不论是strong还是weak类型的指针,都未会见重复依为一个既灭绝的对象,从根本上解决了奇怪释放导致的crash。

3:assign的打算:简单赋值,不改动引用计数,对基础数据类型 (例如NSInteger,CGFloat)和C数据类型(int, float, double, char, 等) 适用简易数据类型 

assign: 用于非指针变量。用于  基础数据类型 (例如NSInteger)和C数据类型(int, float, double, char, 等),另外还有id  如:  @property (nonatomic, assign) int number;  @property (nonatomic, assign) id className;//id必须用assign  反正记住:前面不待加 “*” 的就用assign吧 

4:copy的意:建立一个索引计数为1 的靶子,然后释放旧目标

5:strong的打算:在ARC环境下,只要有平目标为一个strong指针指向,该对象就是不见面叫销毁。如果目标没叫别strong指针指向,那么尽管会见让灭绝。在默认情况下,所有的实例变量和片变量都是strong类型的。可以说strong类型的指针在表现及与非ARC下得retain是于一般之

6:retain的意:在非ARC时代,你用协调retain一个纪念如果保的对象,ARC环境下虽无欲了。现在唯一要做的饶是为此一个指针指为这个目标,只要指针没有叫重置为空,对象就是会直接当堆上。当指针指向新值的时段,原来的对象就是会见吃release一不好。这对实例变量,sunthesize的变量或者是一对变量都是实用的。

assign: 简单赋值,不更改索引计数(Reference Counting)对基础数据类

copy: 建立一个索引计数为1之靶子,然后放旧目标。对NSString

retain:释放旧的目标,将原始目标的值赋予输入对象,再增长输入对象的索引计数为1 ,对另NSObject和其子类

weak和strong的区别:

weak和strong不同之凡 当一个靶不再有strong类型的指针指于她的下 它见面给释放 ,即使还有weak型指针指于它们。一旦最后一个strong型指针离去 ,这个目标将于放走,所有盈余的weak型指针都拿受扫除。

copy与retain的区别:

copy其实是确立了一个同一的目标,而retain不是;

copy是情拷贝,retain是赖针拷贝;

copy是内容的拷贝 ,对于像NSString,的确是这么,如果拷贝的凡NSArray这时只是copy了指向array中互相对应元素的指针.这虽是所谓的”浅复制”。

__block和__weak修饰符的区别

__block不管是ARC还是MRC模式下都得采用,可以修饰对象,还足以修饰基本数据列。

__weak只能当ARC模式下行使,也只能修饰对象(NSString),不可知修饰基本数据类(int)。

__block对象可以当block中给重复赋值,__weak不可以。

相关文章