Я написал приложение с пользовательским классом поиска. Это создает массив результатов.
Затем я назначаю этот массив моему классу FirstViewController и перезагружаю табличное представление, которому назначен массив результатов.
self.aResults = [thisSearch.aResults copy]
...
[[self searchResults] reloadData];
Вскоре после этого я выпускаю thisSearch
[thisSearch release];
Все это работает нормально и показывает таблицу результатов, но если я прокручиваю таблицу вниз и смотрю на строки ниже, они все пустые, а затем, когда я прокручиваю вверх, приложение падает, когда оно перезагружает переработанные ячейки таблицы.
Раньше со мной такого не случалось, но я понял, что происходит утечка памяти, поэтому я сошел с ума по авторелизу и добавил много авторелиза в свой Поиск класс. Но не мой класс FirstViewController.
Итак, если я использую Копировать, не создает ли он на самом деле копию объекта, а просто увеличивает счетчик ссылок? Итак, когда я уничтожаю Search, уничтожаю ли я там массив результатов и, следовательно, уничтожаю то, к чему FirstViewController пытается получить доступ для табличного представления?
Извините, если это не имеет особого смысла, я не очень-то себя чувствую сегодня.
self.aResults = [thisSearch.aResults copy]
вы должны сделать свойство aResults копируемым, например@property (nonatomic, copy) NSArray *aResults;
. Затем, когда вы устанавливаете это свойство, оно автоматически получает копию объекта, для которого вы его устанавливаете. Когда закончите с тем, что находится внутри aResults, выполнитеself.aResults = nil
, и оно будет выпущено. Я не отправил это как ответ, так как это просто совет, но это не причина сбоя вашего приложения. И без дополнительного кода я не знаю, почему это происходит. - person Filip Radelic   schedule 01.09.2011