Загрузка и выгрузка данных в UIViewController - PullRequest
1 голос
/ 24 февраля 2012

Мне нужно загрузить некоторые данные в мой UIViewController, чтобы отобразить виджет UIPickerView в модальном представлении iPhone.

Я провел некоторое исследование и нашел этот ответ в SO. Я приступил к реализации моего кода чтения данных в initWithNibName:bundle: и выгрузки данных в dealloc. Тем не менее, Instruments постоянно сообщали мне, что при многократном отображении модального представления произошла утечка памяти, и во время отладки я заметил, что initWithNibName:bundle: вызывался каждый раз, когда отображалось представление, но dealloc никогда не вызывался при нормальном выполнении (хотя это вызвано низким значением). условие памяти согласно документу Apple UIViewController Reference , и то же самое относится к viewDidUnload).

Я закончил загрузку данных в методе viewDidLoad: и выпустил их в viewDidDisappear:, виджет показывает данные, и нет утечек. Тем не менее, я хотел бы знать, есть ли какие-либо хорошие практики в этом отношении, потому что в одном комментарии в документации Apple упоминается это:

Вы не должны использовать этот метод (например, viewDidUnload) для выпуска пользовательских данных или любой другой информации, которая не может быть легко воссоздана.

Я предположил, что правильным способом была загрузка данных в viewDidLoad и освобождение всех ссылок на него в viewDidUnload, но на практике последний метод не вызывается, если не возникает условие нехватки памяти, и, следовательно, каждый раз, когда отображается представление, данные загружается снова и ссылка на старые данные теряется, что приводит к утечке памяти.

Спасибо за ваши комментарии.

1 Ответ

1 голос
/ 24 февраля 2012

Что-то плохое происходит, если viewDidLoad вызывается каждый раз, когда отображается ваше мнение.viewDidAppear должен вызываться, но viewDidLoad должен вызываться только в первый раз, когда необходимо представление, и если требуется представление и viewDidUnload вызвано.

...