码迷,mamicode.com
首页 > 其他好文 > 详细

ARC下的内存管理

时间:2017-03-20 20:54:43      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:__weak   retain   eal   方法   创建   注意   turn   这一   ons   

1.ARC下单对象内存管理

  • 局部变量释放对象随之被释放
int main(int argc, const char * argv[]) {
   @autoreleasepool {
        Person *p = [[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 {
        // p是弱指针, 对象会被立即释放
        __weak Person *p1 = [[Person alloc] init];
    }
    return 0;
}

2.ARC下多对象内存管理

  • ARC和MRC一样, 想拥有某个对象必须用强指针保存对象, 但是不需要在dealloc方法中release
@interface Person : NSObject

// MRC写法
//@property (nonatomic, retain) Dog *dog;

// ARC写法
@property (nonatomic, strong) Dog *dog;

@end

3.ARC下循环引用问题

  • ARC和MRC一样, 如果A拥有B, B也拥有A, 那么必须一方使用弱指针
@interface Person : NSObject

//@property (nonatomic, retain) Dog *dog;
@property (nonatomic, strong) Dog *dog;

@end

@interface Dog : NSObject

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

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

4.ARC下@property参数

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

ARC下的内存管理

标签:__weak   retain   eal   方法   创建   注意   turn   这一   ons   

原文地址:http://www.cnblogs.com/xufengyuan/p/6591404.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!