MRC内存管理

以MRC为实验

使用属性赋值

@property (retain, nonatomic) User *user;

- (void)viewDidLoad {
    [super viewDidLoad];
    User *u  = [[User alloc] init];  // alloc引用计数默认为1,此时并没人引用它。
    self.user = u;
    [u release];  // 出变量作用域时,释放掉。
}

// retain的setter方法实现
- (void)setUser:(User *)user {
    if (_user != user) {
        [_user release];
        _user = [user retain];  // 引用计数加1
    }
}

使用实例变量赋值

@property (retain, nonatomic) User *user;

- (void)viewDidLoad {
    [super viewDidLoad];
    User *u  = [[User alloc] init];  // alloc引用计数默认为1,此时并没人引用它。
    _user = u;  // 实例变量赋值引用计数不变,相当于将变量的作用域变成了全局的
}

全局的属性在VC的dealloc中释放。

你可能感兴趣的:(MRC内存管理)