下面对property的修饰符作一次总结,上网查了不少资料,后面附上参考的资料链接,多谢他们的帮助。
1、atomic 和 nonatomic
atomic是默认的属性,表示对对象的操作属于原子操作,主要是在多线程的环境下,提供多线程访问的安全。我们知道在多线程的下对对象的访问都需要先上锁访问后再解锁,保证不会同时有几个操作针对同一个对象。如果编程中不涉及到多线程,不建议使用,因为使用atomic比nonatomic更耗费系统资源。nonatomic 表示访问器的访问不是原子操作,不支持多线程访问安全,但是访问性能高。
2、readwrite 和readonly
readwrite 是默认的属性,表示可以对对象进行读和写,会生成对象相应的setter和getter方法。readonly 表示只允许读取对象的值,只会生成对象的getter方法。当给readonly类型赋值时,会直接报错。
(上面两项都比较简单,就不自己总结了,来源于这里)。
3、retain和assign
假设有一个属性property,分别用retain和assign修饰的时候,对于操作:
self.property = newValue;
对于retain,相当于完成了以下几步:
if(property != newValue)
{
[property release];
property = [newValue retain];
}
对于assign,则是:
property = newValue;
retain会先释放原来的对象,然后给新对象引用计数加1;而assign不增加引用计数,assign的作用是简单赋值,不改变引用计数,对基础数据类型(NSInteger,CGFloat)和C数据类型(int, float, double)等适用。
4、strong和weak
当一个对象不再有strong类型引用指向它的时候,它就会被释放,即使该对象还有weak类型引用指向它,并且还指向该对象的weak引用会被置为nil,防止野指针的出现。
在别的地方看到一个形象的例子,忘了出处是哪里