什么时候用Strong 、weak 、assign啊?

作者: 光明程辉 | 来源:发表于2015-11-16 17:01 被阅读2245次

    快速记:

    • 1、通常来说:copy :NSString、NSMutableString、block

    • 2、strong : 一般对象如:NSNumber(除了NSTring 对象外)(retain 是iOS5之前的,相当与5之后的strong),weak弱引用。ARC机制下的assign。 strong强引用。ARC机制下的retain。

    • 3、weak(assign 是iOS5之前的,相当与5之后的weak
      ) : UI控键、、代理

    • 4、assign : 基本数据类型\int \float \double\CGRect \真假(BOOL)\结构体

    1> readwrite:同时生成get方法和set方法的声明和实现

    2> readonly:只生成get方法的声明和实现

    3> assign:set方法的实现是直接赋值,用于基本数据类型

    4> retain:set方法的实现是release旧值,retain新值,用于OC对象类型

    5> copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型

    6> nonatomic:非原子性,set方法的实现不加锁(比atomic性能高)

    简单介绍:

    • 1、assign

    简单赋值,不更改索引计数。 对基础数据类型 (例如NSInteger,CGFloat)和C数据类型(int, float, double, char, 等),适用简单数据类型。此标记说明设置器直接进行赋值,这也是默认值。

    • 2、retain

    对其他NSObject和其子类对参数进行release旧值,再retain新值。释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1

    [注释:指定retain会在赋值时唤醒传入值的retain消息。此属性只能用于Objective-C对象类型,而不能用于Core Foundation对象。(原因很明显,retain会增加对象的引用计数,而基本数据类型或者Core Foundation对象都没有引用计数——译者注)。 注意: 把对象添加到数组中时,引用计数将增加对象的引用次数+1。]

    • 3 copy

    建立一个索引计数为1的对象,然后释放旧对象。

    [注释:对NSString 它指出,在赋值时使用传入值的一份拷贝。拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效。更深入的讨论,请参考“复制”部分。]

    • 4 nonatomic

    禁止多线程,变量保护,提高性能。指出访问器不是原子操作,而默认地,访问器是原子操作。

    • 5


      屏幕快照 2015-12-25 下午3.25.41.png

    相关文章

      网友评论

      • 扛支枪:NSMutableString一般是不用copy的,因为用了copy之后你初始化的对象会变成不可变,你再用可变的方法就崩溃了。

      本文标题:什么时候用Strong 、weak 、assign啊?

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