内存五大区:
- 代码区:存放我们写的代码
- 常量区:存储常量字符串和const常量
- 静态区:存储全局变量和静态变量。在程序结束后系统来释放,常用的单例就是保存在这个区间。
- 堆:这一块的内存由开发人员管理
- 栈:这一块内存系统会自己管理
strong:表示拥有对象,修饰的对象引用计数+1,只要引用计数不为0就不会被销毁。(强制置为nil还是被销毁的)
weak:表示指针指向该对象但不拥有,修饰的对象引用计数不会增加。
assign:修饰基本的数据类型,这些值存在于栈中。
weak和assign:weak修饰对象,assign修饰基本类型。若是assign修饰对象会造成对象释放后指针地址还存在造成野指针,在堆中会早成程序崩溃,在栈中的内存系统会自动处理。
copy和strong:strong本质上是将指针指向同一份内存地址。copy实际上是在内存中拷贝一份对象,指针指向不同的地址
block的存储形态有三种:
_NSConcretStackBlock(栈)、_NSConcretGlobalBlock(全局)、_NSConcretMallocBlock(堆)