У меня есть NSString, которую я сохранил, и единственное место, где я ее освобождаю, это метод dealloc.Однако по какой-то причине позже в программе, когда я пытаюсь сослаться на нее (в частности, на ее длину), я получаю аварийное завершение, говоря [CFString length]: сообщение отправлено на освобожденный экземпляр 0xff32c50.
Очевидно, что он не сохраняется, тогда.
Если под "сохранено" вы имеете в виду "присвоено имущество", вы делаете:
self.prop = [NSString ...];
Или:
prop = [NSString ...];
Потому что первое сохранит (если свойство объявлено как retain
), а второе - нет.Обратите внимание, что свойства NSString обычно должны быть объявлены copy
, но это ортогонально вопросу).
Если ваш код такой, как написано:
entityParameter = [[EntitySearchWindow stringByEvaluatingJavaScriptFromString:@"f();"] retain];
И вы действительно делаете только release
это в dealloc
, затем убедитесь, что ваш содержащий объект еще не был освобожден.Это может происходить.Или, может быть, вы где-то пропустили ссылку на строку и случайно удалили ее без сохранения.
Использование обнаружения зомби в инструментах с «событиями удержания / выпуска трека» (или как там это называется) должно показать вамкаждое последнее событие сохранения / освобождения объекта, включая взорванное.