iOS 开发 property,strong,weak,retain,assign,copy,nomatic 的界别及利用

1:ARAV4C环境下,strong代替retain.weak代替assign,xcode 4.2(ios sdk4.3和以下版本)和此前的本子选择的是retain和assign,是不辅助A路虎极光C的。xcode 4.3(ios5和上述版本)之后就有了A瑞虎C,并且起初使用 strong与weak

2:weak的意义:在APRADOC环境下,全部指向那些指标的weak指针都将被置为nil。这么些T天性很有用,相信广大开发者都被指针指向已放出的靶子所造成的EXC_BAD_ACCESS干扰过,使用A福特ExplorerC以往,不论是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的效率:在A奥迪Q3C环境下,只要某一指标被3个strong指针指向,该指标就不会被灭绝。假设目的没有被别的strong指针指向,那么就会被销毁。在私下认可情状下,全部的实例变量和局部变量都是strong类型的。能够说strong类型的指针在表现上跟非ATiggoC下得retain是相比较相似的

6:retain的法力:在非A陆风X8C时代,你需求团结retain1个想要保持的靶子,A大切诺基C环境下就不必要了。未来唯一要做的正是用二个指南针指向这些目的,只要指针没有被重置为空,对象就会从来在堆上。当指针指向新值的时候,原来的对象就会被release2回。那对实例变量,sunthesize的变量大概是有些变量都以实用的。

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

copy: 建立1个索引计数为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不管是A陆风X8C依然MRC方式下都可以动用,可以修饰对象,还足以修饰基本数据类型。

__weak只幸而A奇骏C情势下行使,也不得不修饰对象(NSString),无法修饰基本数据类型(int)。

__block对象能够在block中被再度赋值,__weak不可以。

相关文章