NSString освобождается даже после сохранения - PullRequest
0 голосов
/ 28 июня 2011

У меня есть NSString, которую я сохранил, и единственное место, которое я освобождаю, это метод dealloc.Однако по какой-то причине позже в программе, когда я пытаюсь сослаться на нее (в частности, на ее длину), я получаю сбой, говоря [длина CFString]: сообщение отправлено на освобожденный экземпляр 0xff32c50.

Я явно сохраняю строку ранее в программе.Есть ли причина, по которой это могло бы произойти?Любая помощь приветствуется.

Строка entityParameter объявляется в заголовке и определяется позже.Вот часть кода: entityParameter = [[EntitySearchWindow stringByEvaluatingJavaScriptFromString:@"f();"] retain];

Место, где я получаю аварию, выглядит так: if([entityParameter length] != 0 && entityParameter != nil) { return; }

1 Ответ

5 голосов
/ 28 июня 2011

У меня есть NSString, которую я сохранил, и единственное место, где я ее освобождаю, это метод dealloc.Однако по какой-то причине позже в программе, когда я пытаюсь сослаться на нее (в частности, на ее длину), я получаю аварийное завершение, говоря [CFString length]: сообщение отправлено на освобожденный экземпляр 0xff32c50.

Очевидно, что он не сохраняется, тогда.

Если под "сохранено" вы имеете в виду "присвоено имущество", вы делаете:

self.prop = [NSString ...];

Или:

prop = [NSString ...];

Потому что первое сохранит (если свойство объявлено как retain), а второе - нет.Обратите внимание, что свойства NSString обычно должны быть объявлены copy, но это ортогонально вопросу).

Если ваш код такой, как написано:

entityParameter = [[EntitySearchWindow stringByEvaluatingJavaScriptFromString:@"f();"] retain];

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

Использование обнаружения зомби в инструментах с «событиями удержания / выпуска трека» (или как там это называется) должно показать вамкаждое последнее событие сохранения / освобождения объекта, включая взорванное.

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