iOS学习笔记(1) - 修饰符

1. nonatomic

非原子性,允许多线程并发访问,性能高。但是访问不安全,直接访问内存值,nonatomic不为setter方法加锁。

系统中一般都使用nonatomic。

2. atomic

原子性,保证线程安全,但是消耗系统资源。atomic为setter方法加锁。

系统默认使用atomic。

3. readonly

只读属性,无法修改,只有getter方法,无setter方法。

4. readwrite

读写属性,默认为读写,系统自动创建setter / getter方法。

5. strong

默认修饰符,strong修饰的对象在引用计数为0时销毁。

6. assign

弱引用声明类型,一般用于修饰基本数据类型。

用assign修饰的对象,对象的引用计数为0时,对象释放后,只能地址不会置为nil,就会出现野指针,所以一般不能使用assign修饰对象。

问:为什么assign能修饰基本数据类型?

答:基础数据类型的内存是分配到栈区上,栈区内存是由系统自动处理的,不会造成野指针。

7. weak

弱引用声明类型,一般用来防止循环引用和修饰delegate。

用weak修饰的对象,对象引用计数为0时,对象释放的同时指针地址置为nil。

8. copy

用copy修饰的对象是不可改变的。相当于在调用对象的set方法时,新拷贝了一份(深拷贝和浅拷贝见下面解释)。

深拷贝:真正的复制了一份,赋值的对象指向了新的地址。

浅拷贝:非真正的复制,而是复制的对象和原对象都指向同一个地址。

问:什么意思?什么叫不可改变的?

答:举个栗子:使用copy属性声明一个对象a,在声明一个对象b同时给对象b赋值,把b的值赋值给a,然后改变对象b的值,这个时候打印结果,b为新赋的值,a则还是b第一次赋的值。

备注:self.bArray = bArray; 相当于方法 self.bArray = [bArray copy];

copy修饰符示例

你可能感兴趣的:(iOS学习笔记(1) - 修饰符)