属性关键字面试题
读写权限
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