RELEASE_SAFELY是什么意思,为什么它在xcode4中不起作用?

时间:2011-03-24 14:20:34

标签: xcode release xcode4

RELEASE_SAFELYRELEASE_CF_SAFELY的含义是什么?好的,它是用于释放对象,但为什么不使用[obj release]

此外我试图在xcode 4中使用它,但我遇到了buid错误:

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 个答案:

答案 0 :(得分:4)

RELEASE_SAFELY不是一个函数,而是一个宏,通常定义如下:

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

(我认为它不是SDK的一部分,但必须在每个项目中单独声明。而且我认为它与XCode版本没有任何关系。)

因此它首先调用 release ,然后另外将变量设置为 nil 。这是一种很好的做法,因为它可以防止双重释放或访问已解除分配的实例。

您的代码似乎认为它是一个函数(而不是宏)。编译器可能会警告您尚未声明它。

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