RELEASE_SAFELY
或RELEASE_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]
吗?你会考虑什么?
答案 0 :(得分:4)
RELEASE_SAFELY不是一个函数,而是一个宏,通常定义如下:
#define RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }
(我认为它不是SDK的一部分,但必须在每个项目中单独声明。而且我认为它与XCode版本没有任何关系。)
因此它首先调用 release ,然后另外将变量设置为 nil 。这是一种很好的做法,因为它可以防止双重释放或访问已解除分配的实例。
您的代码似乎认为它是一个函数(而不是宏)。编译器可能会警告您尚未声明它。
修复方法是将上面的宏定义放在适当的头文件中。