内存管理
闪退:1.内存泄露(不管理内存)
2.内存过度释放
OC:1.手动管理内存(MRC)//弊端 容易过度释放
2.自动管理内存(ARC)//弊端 错误都出在底层 不易查找
垃圾回收//只限于MAC应用程序
手动管理内存:
引用计数增加: 引用计数减少:
+alloc//开辟内存 0 -> 1 |
-retain +1 | -release -1
-copy(只有字符串可以用)原来的不变 | -autorelease//自动 延迟释放 在某个地方控制
新开辟内存 0 -> 1 |
内存管理:
//1.内存的所有权:只有对内存有所有权的指针,才能够release 改变引用计数
//alloc retain copy 都能使对象获得内存的所有权
//release autorelease 都能使对象放弃内存的所有权
//2.有创建就有回收,有+1就有-1
//3.引用计数的概念:有多少个对象对内存有所有权
//4.在一个方法/类中,内存的引用计数要保持平衡(+多少 -多少)
//5.dealloc方法 在对象的引用计数为0时,系统强制调用,用于回收内存
//6.属性的内存管理 对象类型的属性,需要在dealloc中释放一次
//7.自动释放池 负责释放池子范围内所有被标记为autorelease的对象 @autoreleasepool{}
//如果是NSAutoreleasePool对象创建的池子,使用drain可以清空池子里的所有对象
//8.构造器的内存管理 在返回这个对象的时候,使用autorelease自动释放池:
@autoreleasepool{
}