iOS、swift技术交流!糖糖的iOS专题ios基础知识

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

2015-11-16  本文已影响2245人  光明程辉

快速记:

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性能高)

简单介绍:

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

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

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读