Управление памятью iOS - viewDidUnload - PullRequest
0 голосов
/ 31 июля 2011

У меня есть приложение на основе навигации.На экране Список есть UITableView со списком книг.Список книг находится в свойстве NSArray, которое было построено динамически при выполнении HTTP-запроса.Если щелкнуть одну из строк в Списке , вы перейдете на экран Подробно .Допустим, в этой точке есть предупреждение о памяти.Когда вы вернетесь к экрану Список , NSArray будет ноль, потому что viewDidUnload вызван, поэтому Список будет пустым.

Что такоеправильный способ справиться с этой ситуацией?Разве я не должен установить NSArray на ноль в viewDidUnload?

Ответы [ 4 ]

1 голос
/ 31 июля 2011

Как правило, вы только обнуляете свойства для своих элементов пользовательского интерфейса IBOutlet.Вы также можете безопасно очистить все, что сможете восстановить в -viewDidLoad.Но, вообще говоря, этот метод предназначен только для очистки и освобождения памяти, относящейся к представлению, а не к контроллеру представления.

0 голосов
/ 31 июля 2011

Если ваш массив построен в разделе viewDidLoad, вы можете установить его в ноль.Когда представление будет вызвано, оно будет восстановлено.

Как правило, в viewDidUnload вы хотите установить значение nil, которое можно перестроить в разделе viewDidLoad или в файле xib.

Я бы порекомендовал выполнить ленивую инициализацию, хотя бы вот так -

- (NSArray *)bookArray {
    if (bookArray == nil) {
        bookArray = [[NSArray alloc] init];
    }
    return bookArray;
}

затем в viewDidLoad:

self.bookArray = [NSArray arrayWithOjects:...,nil];
0 голосов
/ 31 июля 2011

Обычно я устанавливаю NS (Mutable) Массив объектов в void dealloc ().Nil и отпустите (если объект не был автоматически освобожден).

Если вы используете uinavigationcontroller, представление выдвигается, поэтому, когда вы возвращаетесь из подробного представления, как правило, у вас будут предыдущие данные, если вы не введете в viewwillappearобновление.

Я предполагаю, что у вас есть проблема с освобождением памяти из запроса http.

0 голосов
/ 31 июля 2011

Правильный способ - не хранить ваши данные в UIViewController, а в другом объекте, который управляет вашими данными.

Viewcontroller служит связующим звеном между вашей моделью и вашим экраном. Вы не должны использовать его для хранения ваших данных.

...