ios基础修饰符strong weak
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不可以。