iPhone - viewDidUnload/viewDidLoad вызывается непоследовательно

Сегодня я проводил тестирование и отладку своего приложения для iPhone и столкнулся со странным поведением.

В моем MainView у меня есть два модальных представления, и при показе одного из них с использованием presentModalViewController я заметил, что был вызван метод viewDidUnload моего MainView, в то время как при показе другого этого не происходило. То же самое было и с методом viewDidLoad (из MainView) при закрытии подвидов.

Я проверил два метода открытия и закрытия подвидов, и единственное различие, которое я нашел, было в modalTransitionStyle. В том, который активировал viewDidUnload/viewDidLoad, я использовал UIModalTransitionStyleFlipHorizontal, а в другом UIModalTransitionStyleCrossDissolve. Затем я начал экспериментировать, поменяв местами два стиля и используя другие стили перехода, и обнаружил, что это действительно было причиной различного поведения. На самом деле, при использовании UIModalTransitionStyleFlipHorizontal всегда вызывались методы viewDidUnload/viewDidLoad "родительского" контроллера представления, в то время как для других стилей перехода этого никогда не происходило.

Теперь мой вопрос заключается в том, что это должно вести себя так, и если нет, то какое поведение является правильным. Должны ли вызываться методы выгрузки и загрузки при отображении и закрытии модального представления или нет.

Кроме того, может ли кто-то еще подтвердить или опровергнуть это поведение?

спасибо

PS. метод viewDidLoad двух вызываемых контроллеров представления вызывается каждый раз. Просто для уточнения :)


person pajevic    schedule 15.01.2011    source источник
comment
это происходит в симуляторе или устройстве iOS? какой SDK вы используете?   -  person Felix    schedule 15.01.2011
comment
Укажите, пожалуйста, какую версию SDK вы используете. Также может помочь, если вы покажете фактический код, который вы используете, чтобы проверить, были ли вызваны viewDiDLoad и viewDidUnload.   -  person Alexei Sholik    schedule 15.01.2011
comment
@phix23: Это происходит на iPhone 4 (устройстве) под управлением iOS 4.2.1. Я использую SDK 4.2.   -  person pajevic    schedule 15.01.2011
comment
@Alex: SDK версии 4.2. На самом деле я не использую код для проверки этого. Просто установите точку останова в этих двух методах.   -  person pajevic    schedule 15.01.2011


Ответы (1)


Должны ли вызываться методы выгрузки и загрузки при отображении и закрытии модального представления или нет.

Поведение должно зависеть от текущей ситуации с памятью. Если памяти недостаточно, система отправит предупреждения о нехватке памяти на все контроллеры представлений. Контроллер представления, чье представление в данный момент не отображается на экране, отреагирует на предупреждение о памяти, выгрузив свое представление (что, очевидно, вызовет перезагрузку представления, когда оно снова появится на экране).

Таким образом, в зависимости от ситуации с памятью устройства и требований к памяти контроллера модального представления, который вы отображаете, поведение выгрузки/загрузки должно различаться. Это не должно зависеть от modalTransitionStyle ИМО.

person Ole Begemann    schedule 15.01.2011
comment
Это не должно зависеть от modalTransitionStyle - полностью согласен. Тем не менее, похоже, что это так, по крайней мере, в моем случае. Я действительно проверил это. Я все еще надеюсь, что кто-то еще сталкивался с этим раньше. - person pajevic; 15.01.2011