美文网首页
Objective C - 属性对比

Objective C - 属性对比

作者: 捕梦少女的梦想 | 来源:发表于2017-04-05 15:11 被阅读0次

    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,他们之间可能进行赋值操作,为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。

    相关文章

      网友评论

          本文标题:Objective C - 属性对比

          本文链接:https://www.haomeiwen.com/subject/tjcyottx.html