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

快速记:

  • 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


    什么时候用Strong 、weak 、assign啊?_第1张图片
    屏幕快照 2015-12-25 下午3.25.41.png

你可能感兴趣的:(什么时候用Strong 、weak 、assign啊?)