• iOS中assign,copy,retain之间的区别以及weak和strong的区别(面试)


    • copy: 用于希望保持一份传入值的拷贝,而不是值自身的情况,即把原来的对象完整的赋值到另外一地方,重新加载一内存区,一个地方变了不影响另一个地方的对象。

    • assign:  简单的直接赋值,相当于说两个对象指向同个内存区,一个地方的变了,其他的也跟着改变。

    • retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数 为1

    那上面的是什么意思呢?

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

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

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

    retain 到另外一个 NSString 之 后,地址相同(建立一个指针,指针拷贝),内容当然相 同,这个对象的 retain 值+1

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

    也就是说,

    1.strong :除NSStringlock以外的OC对象

          @property(nonatomic,strong) NSArray  *<#model#>;

    2.weak:各种UI控件(但不是绝对,也有控件要使用strong属性的,但是xib中必须使用weak,因为控件被拖进xib的时候就被strong修饰了)

          @property (nonatomic,weak) UIButton *button;

    3.assign:CGFloat,NSInteger等基本数据类型、枚举、结构体(非OC对象)

         @property(nonatomic,assign) CGFloat <#model#>;

    4.copy:

        <1. copy : 创建的是不可变副本(如NSString、NSArray、NSDictionary)

        <2.  mutableCopy :创建的是可变副本(如NSMutableString、NSMutableArray、NSMutableDictionary)

        <3. @property(nonatomic,copy)NSString *<#model#>;

    •@property内存管理策略的选择

    •1.非ARC

    • 1> copy : 只用于NSStringlock

    • 2> retain : 除NSStringlock以外的OC对象

    • 3> assign : 基本数据类型、枚举、结构体(非OC对象),当2个对象相互引用,一端用retain,一端用assign

    •2.ARC

    • 1> copy : 只用于NSStringlock

    • 2> strong : 除NSStringlock以外的OC对象

    • 3> weak : 当2个对象相互引用,一端用strong,一端用weak

    • 4> assgin : 基本数据类型、枚举、结构体(非OC对象)



    文/zhengleBaby(简书作者)
    原文链接:http://www.jianshu.com/p/97c49a57f455
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 相关阅读:
    函数特化
    模板函数总结
    学习代码1
    宏指令
    #define宏作用
    oracle 重要函数
    JMeter 系列之—-01 使用
    Selenium系列之--03 常见元素操作总结
    【转】TestNG常用注解
    CMMI 2,3,4,5级涉及的过程域(PA)介绍
  • 原文地址:https://www.cnblogs.com/it-k-50/p/5857797.html
Copyright © 2020-2023  润新知