【发布时间】:2011-01-18 01:09:51
【问题描述】:
在 Objective-c 中,我知道您需要释放您初始化/保留/复制的任何内容。我需要在return 声明之前这样做吗?我想了解明确调用release 而不是使用autorelease。
-(void) someMethod
{
AnotherClass* ac = [[AnotherClass alloc] init];
if([ac somethingHappens]){
// Do I need to release ac here?
return;
}
[ac doSomethingElse];
[ac release];
}
谢谢!
【问题讨论】:
-
在上面的代码中有多个返回路径是不好的做法,一个显式的,一个隐式的。你应该把 return 移到 [release] 下面,想象一下很多 if() 语句,每个都做了一个 return,那是很多重复的代码。
-
为什么这是不好的做法,因为它很难遵循?似乎遵循一堆 if 逻辑可能同样复杂。
-
当你有 30 个地方需要复制并通过发布代码块时,它是不可维护的,当你添加一个必须 [release] 的东西时,你现在必须更新 30 个地方.它违反了 DRY 原则(不要重复自己)。如果您有返回值,更好的做法是在逻辑中设置返回值,然后在函数底部返回该值,就在 [release] 块的单点之后。
标签: objective-c release local-variables