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,其实也是不遵守内存管理原则
|