为什么要进行内存管理:
对象只开辟不释放,程序容易出错或崩溃
管理原则:谁创建,谁销毁
管理方式:手动管理
管理机制:retainCount 引用计数 方式管理对象所占用的内存
1. 使用 alloc 为对象分配内存;使用 dealloc 释放对象所占用的内存。
2. 使用 alloc、new或者copy构造对象时,对象的retainCount为 1。
3. 调用对象的 retain 方法可以增加1 retainCount。
4. 调用对象的 release 方法可以减少1 retainCount。
5. 当对象的retainCount 为 0 时,dealloc 会自动调用,释放对象内存;否则 分配给对象的内存将被一直占用。
6. 所有对象可以使用 retainCount 属性查看当前的计数器值。
retainCount 只是内存管理的一种机制,实际操作中,是不运用它的。
会影响计数器操作的事物:
- 1. alloc 创建一个对象,并将其引用计数设为 1,并拥有对象所有权
- 2. copy (NSCopying)制造一个副本,并将副本的引用计数设为 1,并拥有副本所有权
- 3. retain 使对象引用计数加1,并拥有对象所有权
- 4. release 使对象引用计数减1,并放弃对象所有权
- 5. autorelease 向autoreleasepool注册
dealloc 解决内存泄露;回收自身所占用的内存
作为便利构造器创建对象来说,此时返回autorelease ,而不直接用release。
alloc 创建 +1
retain ~~~~ +1
release ~~~~~~ -1
dealloc 销毁 回收自身所占用内存
autorelease ~~~~~ 自动释放池结束时,池内所有的自动释放对象都会释放
copy 创建 +1