我已经完成了Objective-C的方式,当时和最近(即刚刚)读取Apple网站上关于使用retain
和release
的文档。但是,在他们的Creating an iPhone Application页一些代码有我有点糊涂:关于苹果参考库中保留/释放语义的基本问题
- (void)setUpPlacardView
{
// Create the placard view -- it calculates its own frame based on its image.
PlacardView *aPlacardView = [[PlacardView alloc] init];
self.placardView = aPlacardView;
[aPlacardView release]; // What effect does this have on self.placardView?!
placardView.center = self.center;
[self addSubview:placardView];
}
没有看到整个班级,似乎self.placardView
也是PlacardView *
和它aPlacardView
分配不似乎表明它会保留对它的引用。因此,在我看来,我评论过的行([aPlacardView release];
)可能导致aPlacardView
的保留计数为0,因此被解除分配。由于self.placardView
指向它,现在不会指向释放内存并导致问题吗?
属性的概念并不邪恶,它是Apple引入的点符号时间。它污染了语法并导致无尽的混淆。就我个人而言,我使用很多属性,但我使用普通的Objective-C语法来获取和设置它们。 – JeremyP 2010-04-11 19:22:21
是的,我同意这一点。这就是为什么我在邪恶一词前面加上括号。对我来说,点符号完全可以;我总是提醒自己,这些都是方法调用。但我衷心地认为这对初学者来说是一个很大的混乱。 – Yuji 2010-04-11 22:27:41