首页 > 代码库 > ARC下的内存管理
ARC下的内存管理
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下的内存管理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。