设为首页 加入收藏

TOP

OC 知识:彻底理解 iOS 内存管理(MRC、ARC)(五)
2019-08-26 07:10:19 】 浏览:138
Tags:知识 彻底 理解 iOS 内存 管理 MRC ARC
[[Person alloc] init]; } // 执行到这一行局部变量p释放 // 由于没有强指针指向对象, 所以对象也释放 return 0; }
  • 清空指针对象随之被释放
    int main(int argc, const char * argv[]) {
       @autoreleasepool {
            Person *p = [[Person alloc] init];
            p = nil; // 执行到这一行, 由于没有强指针指向对象, 所以对象被释放
        }
        return 0;
    }
  • 默认清空所有指针都是强指针
    int main(int argc, const char * argv[]) {
       @autoreleasepool {
            // p1和p2都是强指针
            Person *p1 = [[Person alloc] init];
            __strong Person *p2 = [[Person alloc] init];
        }
        return 0;
    }
  • 弱指针需要明确说明
    • 注意: 千万不要使用弱指针保存新创建的对象
      int main(int argc, const char * argv[]) {
         @autoreleasepool {
              // p是弱指针, 对象会被立即释放
              __weak Person *p1 = [[Person alloc] init];
          }
          return 0;
      }

5. ARC下多对象内存管理

  • ARC和MRC一样, 想拥有某个对象必须用强指针保存对象, 但是不需要在dealloc方法中release
    @interface Person : NSObject
    // MRC写法
    //@property (nonatomic, retain) Dog *dog;
    
    // ARC写法
    @property (nonatomic, strong) Dog *dog;
    @end

6. ARC下@property参数

  • strong : 用于OC对象,相当于MRC中的retain
  • weak : 用于OC对象,相当于MRC中的assign
  • assign : 用于基本数据类型,跟MRC中的assign一样

6. ARC下循环引用问题

  • ARC和MRC一样,如果A拥有B,B也拥有A,那么必须一方使用弱指针
@interface Person : NSObject
@property (nonatomic, strong) Dog *dog;
@end

@interface Dog : NSObject
// 错误写法, 循环引用会导致内存泄露
//@property (nonatomic, strong) Person *owner;

// 正确写法, 当如果保存对象建议使用weak
@property (nonatomic, weak) Person *owner;
@end

 

作者:行走少年郎
链接:https://www.jianshu.com/p/48665652e4e4
來源:简书

首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇常用在线软件获取 下一篇BBWebImage 设计思路

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目