属性关键字面试题

读写权限

readonly

readwrite

原子性

atomic 赋值和获取是线程安全 例如用atomic修饰一个数组,对这个数组赋值和获取是线程安全的,但是如果操作数组,例如增删元素,那不在atomic有效范围内

nonatomic

引用计数

retain/strong

assign(可以修改对象和基本数据类型)/unsafe_unretained(mrc使用)

weak

copy

assign

修饰基本数据类型,如int BOOL等

修饰对象类型时,不改变其引用计数

会产生悬垂指针。(assign修饰的对象 被释放之后 指针还是指向原地址)

weak

修饰对象类型时,不改变其引用计数

所指向对象在被释放之后会自动置nil

浅拷贝特点:

多了个指针的指向 增加了引用计数

没有发生新的内存分配

深拷贝特点:

不会添加被拷贝对象的引用计数

产生了一个内存分配

区分深拷贝 浅拷贝

是否开辟了新的内存空间

是否影响了引用计数

copy关键字

可变对象的copy和mutableCopy都是深拷贝

不可变对象的copy是浅拷贝 mutableCopy是深拷贝

copy方法返回的否是不可变对象

执行add remove方法就会crash

原文地址:https://www.cnblogs.com/WellLin/p/12711597.html