RELEASE_SAFELY的含义是什么,为什么在xcode4中无法使用?

3
RELEASE_SAFELYRELEASE_CF_SAFELY是什么意思?它们用于释放对象,但为什么不使用[obj release]
此外,我尝试在Xcode 4中使用它,但遇到构建错误:
Undefined symbols for architecture i386:
  "_RELEASE_SAFELY", referenced from:
      -[AdressBookModel search:] in AdressBookModel.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

我可以仅使用[obj release]吗?你认为怎样?

1个回答

4

RELEASE_SAFELY不是一个函数,而是一个宏,通常被定义为:

#define RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }

我认为它不是SDK的一部分,而是需要在每个项目中单独声明。而且我认为它与XCode版本无关。

因此,它首先调用"release",然后还将变量设置为"nil"。这是好的做法,因为它可以防止重复释放或访问已释放的实例。

看起来你的代码认为它是一个函数(而不是一个宏)。可能编译器会警告你它没有被声明。

修复方法是将上述宏定义放在适当的头文件中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接