MRC:
retain:适用继承于NSObject类的对象类型。释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的引用计数为1。
assign:适用基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)。简单赋值,不更改对象的引用计数。
ARC:
strong(强引用):等同于retain,但在block声明时和retainyou 区别。
weak(弱引用):适用代理的声明。
copy(深拷贝、浅拷贝):适用NSString类型和block类型。
atomic和nonatomic:
atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
retain和strong的区别:
在声明block时,strong相当于copy,retain相当于assign。
assign和strong的区别:
在声明block时,strong相当于copy,retain相当于assign。
assign和weak的区别:
在ARC中,在有可能出现循环引用的时候,往往要通过让其中一端使用weak来解决;自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用weak。
assign 可以用非OC对象,而weak必须用于OC对象。
weak 此特质表明该属性定义了一种“非拥有关系” (nonowning relationship)。为这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同assign类似,然而在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。
而 assign 的“设置方法”只会执行针对“纯量类型”(scalar type,例如 CGFloat 或 NSlnteger 等)的简单赋值操作。
strong强引用和weak弱引用的区别:
(weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它。
一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。
深拷贝和浅拷贝:
用@property声明 NSString、NSArray、NSDictionary 经常使用copy关键字,是因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary,他们之间可能进行赋值操作,为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。