Автоматический подсчет ссылок и UINavigationController - PullRequest
0 голосов
/ 10 ноября 2011

У меня очень странная проблема с UINavigationController в сочетании с ARC (Автоматический подсчет ссылок).У меня есть это приложение для iPad с UIViewController, которое содержит представление с некоторыми подпредставлениями.Это представление содержит UIScrollView (по крайней мере, с 5 подпредставлениями) и 2 простых представления, черную полосу и белую полосу.

Всякий раз, когда я помещаю что-то в стек UINavigationController, скажем, WebView, и яполучить предупреждение о памяти, UINavigationController вызывает ViewDidLoad для всех текущих и предыдущих UIViewController, которые были / находятся в его стеке.

Теперь возникает проблема, когда я выталкиваю указанный WebView из стека, и я возвращаюсь к UIViewControllerс прокруткой, это ушло!Он полностью отключен.

Я подозреваю, что метод -didReceiveMemoryWarning освобождает некоторые вещи под капот, так как ARC включен.Как я могу заставить ARC удерживать этот конкретный ViewController?

Может кто-нибудь помочь мне с этим?Потому что это действительно раздражает меня в этот самый момент.

Большое спасибо!

-B

1 Ответ

3 голосов
/ 10 ноября 2011

Похоже, вы загружаете что-то очень тяжелое в веб-представление, которое вызывает предупреждение о памяти (или вы делаете другие вещи, которые приводят к нехватке памяти).UINavigationController получает -didReceiveMemoryWarning и пересылает его всем контроллерам представлений, которые выгружают свои представления (-> viewDidUnload говорит вам выпустить вещи, которые вы не хотите оставлять в памяти. ARC не покрывает это, поэтому вы должны обнулять все, чтосвязано с видом).Когда вы вернетесь назад, loadView и viewDidLoad будут вызваны.Вы, вероятно, не полностью восстанавливаете свои представления - особенно представление прокрутки - чтобы соответствовать состоянию, в котором они были до предупреждения памяти.Помните, что в iOS 5 предупреждения о памяти появляются реже, чем в предыдущих версиях iOS (ОС пытается освободить как можно больше памяти), но когда вы получаете предупреждение о памяти, это ваш последний шанс остаться в живых.

...