在Objective-C中发布了ivars

时间:2011-04-29 02:16:42

标签: iphone objective-c xcode ios

好的,看着这个:

Apple docs: Declared Properties

如果向下滚动到dealloc,则显示为:

“通常在dealloc方法中,您应该直接释放对象实例变量(而不是调用set访问器并将nil作为参数传递),如下例所示:”

- (void)dealloc {
    [property release];
    [super dealloc];
}

“但是,如果您正在使用现代运行时并合成实例变量,则无法直接访问实例变量,因此必须调用访问器方法:”

- (void)dealloc {
    [self setProperty:nil];
    [super dealloc];
}

现在,我必须拥有至少15到20本关于iOS开发的书籍。我不能说我曾经见过这些书中的任何代码,建议除了以外做任何其他事情:

[someproperty release];

是否有令人信服的理由来编辑一堆代码文件,这些代码文件非常适合采用Apple的推荐?未来的工作怎么样?或者,它们几乎相同吗?

2 个答案:

答案 0 :(得分:2)

Apple的文档似乎仅适用于您默认情况下合成的情况。如果你关闭它,这似乎是默认情况,你需要@synthesize,它允许你直接访问变量。

就个人而言,我这样做:

@synthesize someProperty=_someProperty;

这样我就可以了:

- (void)dealloc {
  [_someProperty release];
  [super dealloc];
}

有关详情,请参阅Jeff LaMarche's blog

答案 1 :(得分:1)

在现代运行时,您不再需要为属性声明实例变量,也不必在实现中编写@synthesize。如果你的代码已经声明了实例变量,那么就没有理由用调用set accessor来替换调用release的代码(你粘贴的第一个引用甚至说明了这一点。)