黑马程序员技术交流社区
标题: OC学习笔记之单个对象内存管理:内存泄露 [打印本页]
作者: chunhuayun 时间: 2015-10-6 17:03
标题: OC学习笔记之单个对象内存管理:内存泄露
1、避免使用僵尸对象的方法
避免使用僵尸对象的方法是,在堆内存释放后,给对象赋值为nil,因为给
nil发送消息是没有任何效果的。
2、单个内存对象的内存泄露问题
1)情况一
- @autoreleasepool {
- //此时p是个局部变量,程序结束时p被释放,但是该对象在堆区分配的内存没有被释放,称为【内存泄露】
- //创建完成后没有释放
- Person *p = [Person new];
- }
-
复制代码
2)情况二
- @autoreleasepool {
- //没有遵守内存管理原则
- Person *p = [Person new];
- [p retain];
-
- [p release];
- }
复制代码
正确做法:
- @autoreleasepool {
- //正确做法
- Person *p = [Person new];
- [p retain];
- [p release];
- [p release];
- }
复制代码
情况三:
- @autoreleasepool {
- //不当的使用nil
- Person *p = [Person new];
- p = nil;
- [p eat];
- [p release];
- }
复制代码
正确做法:
- @autoreleasepool {
- //不当的使用nil
- Person *p = [Person new];
-
- [p eat];
- [p release];
- p = nil;
- }
复制代码
情况四:
在函数中对传入的对象进行了retain,其实也是不遵守内存管理原则
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |