Есть ли автозапуск NSKeyedUnarchiver? - PullRequest
0 голосов
/ 16 апреля 2010

Я делаю некоторое архивирование в списке свойств, и когда я разархивирую свои данные с помощью NSKeyedUnarchiver, я обнаруживаю, что мое приложение падает, если впоследствии я освобождаю объект. Мне было интересно, если сообщение finishDecoding также автоматически высвобождает объект. Кажется странным, что он падает, когда я отпускаю его.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2010

Что ты выпускаешь? NSKeyedUnarchiver или разархивированный объект?

Если вы выпустите NSKeyedUnarchiver или нет, это зависит от того, как вы его создали. Это следует обычным правилам. Если вы используете alloc + initForReadingWithData, вы должны отпустить, если вы используете unarchiveObjectWithData или unarchiveObjectWithFile - вы не должны.

Что касается результата decodeObjectForKey, то он также следует обычному правилу, согласно которому метод возвращает автоматически выпущенный объект, и вы не должны освобождать его, если вы явно не сохранили его.

Относительно finishDecoding: ожидается, что вы вызовете его явно до того, как объект NSKeyedUnarchiver будет выпущен. Вы не должны использовать unarchiver после этой точки, но объект все еще жив.

0 голосов
/ 16 апреля 2010

Если вы инициализируете unarchiver с

[[NSKeyedUnarchiver alloc] initForReadingWithData:data]

Тогда вы несете ответственность за его освобождение, когда вы закончите разархивирование.

Если после сбоя происходит сбой, то, скорее всего, ваша ошибка в другом месте. Возможно, потому что вы используете объекты, которые предоставляет ваш unarchiver, не сохраняя их. И когда разархиватор освобождается, он освобождает предоставленные вам объекты. Если вы не сохранили их, они будут освобождены, и вы упадете, когда будете ссылаться на эти объекты.

...