Что означает RELEASE_SAFELY и почему он не работает в xcode4? - PullRequest
3 голосов
/ 24 марта 2011

что означает RELEASE_SAFELY или RELEASE_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 голосов
/ 24 марта 2011

RELEASE_SAFELY - это не функция, а макрос, и обычно определяется следующим образом:

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

(я думаю, что он не является частью SDK, но должен быть объявлен в каждом проекте отдельно. И я не думаю, что он имеет какое-либо отношение к версии XCode.)

Итак, сначала он вызывает release , а затем дополнительно устанавливает переменную на nil . Это хорошая практика, потому что она предотвращает двойные релизы или доступ к освобожденному экземпляру.

Кажется, ваш код считает, что это функция (а не макрос). Возможно, компилятор предупредит вас, что он не был объявлен.

Исправление - поместить приведенное выше определение макроса в соответствующий заголовочный файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...