ios基础修饰符strong weak

2016-04-12  本文已影响28人  六朝

  

Copy 其实是建立了一个相同的对象,而 retain 不是:

比如一个 NSString 对象,地址为 0×1111,内容为@”ABC”

Copy 到另外一个 NSString 之 后,地址为 0×2222,内容为@“ABC”,新的对象 retain 为 1, 旧对象没有变化

retain 到另外一个 NSString 之 后,地址为 0x3333 ,内容为 0×1111 ,这个对象的 retain 值+1

assign 地址还是0x1111,内容也还是“ABC”。

也就是说,

assign 是完全拷贝,retain 是指针拷贝,copy 是内容拷贝。

MRC时代常用修饰符具体使用

使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)  --------有可能造成野指针,程序崩溃,待确定没试过

使用copy: 对NSString

使用retain: 对其他NSObject和其子类

nonatomic关键字:

atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

在ARC时代常用修饰符

weak和strong的区别:

weak和strong不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它。一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。

__block和__weak修饰符的区别

__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。

__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。

__block对象可以在block中被重新赋值,__weak不可以。

上一篇下一篇

猜你喜欢

热点阅读