什么时候用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
屏幕快照 2015-12-25 下午3.25.41.png