各位小伙伴有木有在使用某个应用的时候出现闪退的现象呢?这一现象跟我们程序的内存管理息息相关.下面是本人总结的一些关于内存管理的一些笔记,希望和各位小伙伴共同探讨,共同进步.一,内存管理的黄金法则:
谁创建,谁release. 谁用alloc,new,copy,mutablecopy创建的对象,谁就要调用release方法,让计数器-1.
谁retain,谁release. 谁retain,之后就要调用release方法.
二,相关概念
1,僵尸对象,被回收的对象(不可用对象)
2.野指针:指向僵尸对象的指针.
3,空指针:不知想任何对象的指针,里面存的是nil.
注意给空指针发送空消息,不会有任何响应,也不会报错.
三,如何避免僵尸对象
对象release之后,视情况,加入 p = nil; 四:内存泄露的几种情况 1, retain 和 release 的个数不匹配,导致内存泄露 2, 对象的不当的赋值 3, 在方法中进行了retain操作可能导致内存泄露 五,多个对象内存管理 1,set方法的内存管理 - (void) setCar:(Car*)car { if (_car != car) { // 判断传进来的是否是新值 [_car release]; //将旧值释放 _car = [car retain]; // 新值retain,并将返回的对象赋值给成员变量 } } 2.dealloc方法的实现 - (void) dealloc { [_car release]; // 新将对象的所属对象释放 [super dealloc]; // 在调用[super release];,切只能放在最后. } 未完待续!
|