A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1、避免使用僵尸对象的方法
避免使用僵尸对象的方法是,在堆内存释放后,给对象赋值为nil,因为给
nil发送消息是没有任何效果的。

2、单个内存对象的内存泄露问题
1)情况一
  1.    @autoreleasepool {
  2.         //此时p是个局部变量,程序结束时p被释放,但是该对象在堆区分配的内存没有被释放,称为【内存泄露】
  3.         //创建完成后没有释放
  4.         Person *p = [Person new];
  5.     }
复制代码


2)情况二
  1.     @autoreleasepool {
  2.         //没有遵守内存管理原则
  3.         Person *p = [Person new];
  4.         [p retain];
  5.         
  6.         [p release];
  7.     }
复制代码


正确做法:
  1.   @autoreleasepool {
  2.         //正确做法
  3.         Person *p = [Person new];
  4.         [p retain];
  5.         [p release];
  6.         [p release];
  7.     }
复制代码

情况三:
  1.     @autoreleasepool {
  2.         //不当的使用nil
  3.         Person *p = [Person new];
  4.         p = nil;
  5.         [p eat];
  6.         [p release];
  7.     }
复制代码


正确做法:
  1.    @autoreleasepool {
  2.         //不当的使用nil
  3.         Person *p = [Person new];
  4.         
  5.         [p eat];
  6.         [p release];
  7.         p = nil;
  8.     }
复制代码

情况四:
在函数中对传入的对象进行了retain,其实也是不遵守内存管理原则

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马