Различие Objective C между установкой ноля и выпуском

Я получил эту ошибку, когда я случайно изменил установку сборки идентификационных данных подписывания кода в цели, а не уровне проекта. Удостоверьтесь, что Вам ввели корректную информацию на уровне проекта (получите информацию о проекте, а не цель.), Если Вы изменили целевые настройки сборки, попытайтесь удалить значения оттуда. Цель тогда наследует установку проекта.

я также сделал бы "чистый все", затем вышел бы из XCode, удалил бы все из папки сборки и попытался бы сделать другую сборку. (Это - прием вуду XCode, который, кажется, решает много проблем подписывания кода.)

28
задан Jim Puls 31 July 2009 в 05:35
поделиться

1 ответ

self.object = nil вызывает ваш установщик, который освобождает старое значение, устанавливает член в nil и, возможно, выполняет другие действия (это метод , поэтому он мог делать все, что угодно). Часть этого "чего угодно" потенциально опасна; см., например, этот вопрос .

[освобождение объекта] освобождает старое значение, но оставляет член в виде теперь болтающегося указателя, что является хорошим рецептом для ошибок. В dealloc это не имеет особого значения, поскольку сам указатель тоже скоро исчезнет, ​​но в любом другом случае очень плохая идея освобождать член, не устанавливая для него значение nil .

(Кстати, вы никогда не должны предполагать, что освобождение объекта дает ему счетчик ссылок 0. Он освобождает вашу ссылку, но другие объекты все еще могут иметь ссылки на него.)

54
ответ дан 28 November 2019 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: