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