标签:__weak retain eal 方法 创建 注意 turn 这一 ons
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; }
@interface Person : NSObject // MRC写法 //@property (nonatomic, retain) Dog *dog; // ARC写法 @property (nonatomic, strong) Dog *dog; @end
@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
标签:__weak retain eal 方法 创建 注意 turn 这一 ons
原文地址:http://www.cnblogs.com/xufengyuan/p/6591404.html