1.weak和assign的区别
weak
- 只能修饰对象
- 当引用计数为0时,会将指针置空不会出现野指针
assign
-
能修饰对象和基本数据类型
-
如果修饰的是对象,当引用计数为0时,不会将指针置空,是不安全的
为什么weak会被置空? 系统会维护一个weak表(哈希表[对象地址: weak指针地址]),用来存储指向某个对象的所有weak指针;当对象被释放时通过对象指针查询weak表找到weak指针地址并置为nil,然后再从weak表中移除此对象地址的key完成置空
2.copy和strong应用场景
copy
- 深拷贝,当对其赋值的时候会复制一份新的内容,与复制的对象不会公用一块内存地址
- 适用于可能在可变不可变对象之间操作的场景(NSMutableString等含有Mutable的对象)
strong
- 浅拷贝,当对其赋值的时候只会复制内存地址,与复制的对象公用一块内存地址
- 适用于不可变对象之间操作
后续补充
#3.响应链
#4.UIView和CALayer区别
#5.链表
#6.二叉树
#7.排序
#8.CoreData
#9.网络
#10.内存管理
#11.队列
#12.内存分配
#13.init和alloc
#14.kvc和kvo
网友评论