ARC下的内存管理
本小节知识点:
- 【掌握】ARC下单对象内存管理
- 【掌握】ARC下多对象内存管理
- 【掌握】ARC下循环引用问题
- 【掌握】ARC下@property参数
1.ARC下单对象内存管理
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc] init];
}
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 {
Person *p1 = [[Person alloc] init];
__strong Person *p2 = [[Person alloc] init];
}
return 0;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
__weak Person *p1 = [[Person alloc] init];
}
return 0;
}
2.ARC下多对象内存管理
- ARC和MRC一样, 想拥有某个对象必须用强指针保存对象, 但是不需要在dealloc方法中release
@interface Person : NSObject
@property (nonatomic, strong) Dog *dog;
@end
3.ARC下循环引用问题
- ARC和MRC一样, 如果A拥有B, B也拥有A, 那么必须一方使用弱指针
@interface Person : NSObject
@property (nonatomic, strong) Dog *dog;
@end
@interface Dog : NSObject
@property (nonatomic, weak) Person *owner;
@end
4.ARC下@property参数
- strong : 用于OC对象, 相当于MRC中的retain
- weak : 用于OC对象, 相当于MRC中的assign
- assign : 用于基本数据类型, 跟MRC中的assign一样