这是否有必要在分配之前检查对象为零?

Tat*_*tat 1 programming-languages objective-c

目标c问题,我有一个指针NSObject*abc; 我没有在init方法中分配和初始化它.那么,我需要在方法中这样做吗?

-(void)someThingElse{
 if(abc != nil){
    [abc release];
    abc = nil;
 }

 abc = [[NSObject alloc] init];

}
Run Code Online (Sandbox Code Playgroud)

我的流量对吗?谢谢.

Dav*_*har 6

您的代码可以简化为:

[abc release];
abc = [[NSObject alloc] init];
Run Code Online (Sandbox Code Playgroud)

因为

  • 发送-release消息nil什么都不做,所以不需要检查nil

  • 如果您只是要分配给它abc,nil则无需设置

您也可以考虑将语句声明abc为具有retain语义的objective-c属性,在这种情况下,您所要做的就是:

self.abc = [[[NSObject alloc] init] autorelease];
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,你的dealloc方法也应该包括[abc release],当然