具有属性的内存管理

mk1*_*k12 0 memory-management properties objective-c retain

我开始在objective-c中更好地理解内存管理,但有些东西我不明白.这是一个属性声明:

@property (nonatomic, retain)UILabel *myLabel;
Run Code Online (Sandbox Code Playgroud)

这是它看不见的合成二传手(我认为):

- (void)setMyLabel:(UILabel *)newValue {
    if(myLabel != newValue) {
        [myLabel release];
        myLabel = [newValue retain];
    }
}
Run Code Online (Sandbox Code Playgroud)

这节省了你每次保留和填充的所有工作,但是说我第一次设置我的属性,它还没有被分配,所以它的引用数是0,对吧?所以我这样做

UILabel *tempLabel = [[UILabel alloc] init];
self.myLabel = tempLabel;
[tempLabel release];
Run Code Online (Sandbox Code Playgroud)

我不确定那里会发生什么,什么时候什么也没发布,但是说这个属性已经有了值,我们设置了它.在setter中,首先它被释放.那不是让它消失吗?如果它的引用计数是1,然后在它发布的setter中,它如何保持设置为保留的新值?

谢谢!!

Lou*_*arg 6

我认为你混淆了对象和引用.属性是对象的引用,而不是对象本身.当您设置或取消设置属性时,它会向其指向的对象发送保留和释放,但引用本身是属性所在对象的一部分(在本例中为self).

阅读像指针左值这样的东西可能很有用.