1、assign :简单赋值,不更改索引计数
2、retain:与strong相对应,使用了引用计数+1
3、copy:用于非共享内存时,每个指针有自己的内存空间
4、atomic://默认属性
A,当一个变量声明为atomic时,意味着在多线程中只能有一个线程能对它进行访问
B,当一个变量声明为atomic时,该变量为线程安全型,但是会影响访问速度,
C,当一个变量声明为atomic时,在非ARC编译环境下,需要设置访问锁来保证对该变量进行正确的get/set
5、nonatomic:
A, 当一个变量声明为nonatomic时,意味着多个线程可以同时对其进行访问
B, 当一个变量声明为nonatomic时,它是非线程安全型,访问速度快;
C, 当一个变量声明为nonatomic时,当两个不同的线程对其访问时,容易失控。
总结:atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
if (property != newValue) {
[property release];
property = [newValue retain];
}
6、strong://ARC中默认属性,等于非ARC中的retain
7、weak:与assign 相对应
8、readonly:只有get方法,没有set方法
9、readwrite://默认属性
10、unsafe_unretained:用在ARC编译环境下,在此环境下,与assign相似。它只是告诉ARC如何正确地调用声明为unsafe_unretained变量的retain和release
网友评论