ma1*_*w28 1 iphone objective-c key-value-observing key-value-coding three20
#define TT_RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }
Run Code Online (Sandbox Code Playgroud)
为什么three20认为释放后将ivar指定为nil是安全的?省略这ivar = nil一步是不安全的吗?
这就是我发现的全部内容:http: //github.com/facebook/three20/commit/1b946f475fb28d60e0aafc9ef394050c642c3a5b#commitcomment-115517
我不认为我在使用KVO/KVC,但我不确定.我现在正在读它.
谢谢!
马特
在里面-dealloc,这个问题拆分了Objective-C大师.阅读最近的博客文章,例如.
在其他方法的实现中,我个人的意见是,您不应该在首次发布后将变量保留在范围内.这段代码
SomeClass* someObject= ...
... use someObject ...
[someObject release];
... more code ...
Run Code Online (Sandbox Code Playgroud)
可能会someObject在以后的代码中意外访问,从而导致崩溃.所以你可能会说
SomeClass* someObject= ...
... use someObject ...
[someObject release];
someObject=nil;
... more code ...
Run Code Online (Sandbox Code Playgroud)
会更好,因为消息传递nil是无害的.但是,在这种情况下,您可以完全消除危险:
{
SomeClass* someObject= ...
... use someObject ...
[someObject release];
}
... more code ...
Run Code Online (Sandbox Code Playgroud)
这里我使用一个{...}块来限制变量的范围.然后使用someObject稍后只是一个编译时错误.
| 归档时间: |
|
| 查看次数: |
1195 次 |
| 最近记录: |