黑马程序员技术交流社区

标题: OC之内存管理 [打印本页]

作者: thnnht    时间: 2015-12-3 23:49
标题: OC之内存管理
    各位小伙伴有木有在使用某个应用的时候出现闪退的现象呢?这一现象跟我们程序的内存管理息息相关.下面是本人总结的一些关于内存管理的一些笔记,希望和各位小伙伴共同探讨,共同进步.一,内存管理的黄金法则:
谁创建,谁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];,切只能放在最后.
}
未完待续!      




作者: thnnht    时间: 2015-12-3 23:55
没有copy啊,求技术分,黑马币!
作者: roger1228    时间: 2015-12-4 00:09
不错不错~ 顶起来~

作者: kingwang    时间: 2015-12-4 00:10
ok
。哈哈
作者: Flowerkanzhe    时间: 2015-12-4 12:36
总结的挺好的
作者: Newbee_123    时间: 2015-12-4 21:45
不错不错~ 顶起来~
作者: 学习黑马精神    时间: 2015-12-4 22:14
厉害  !   加油!  学习了!
作者: 罗文强    时间: 2015-12-5 00:17
收藏,再过几天我也要学到这了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2