2013-04-22 1 views
0

Использования: Xcode 4.6 Storyboards ARC Модели перехода к SecondViewControllerApp работает медленно после загрузки ViewController, затем выгрузить около 15-20 раз

У меня есть приложение, которое имеет главный ViewController, который загружает новый veiwController когда устройство повернуто вправо. Когда приложение запускает все работает отлично. Если я вращаю устройство, а затем обратно, который выгружает контроллер второго взгляда, примерно в 15-20 раз приложение очень неряшливо. Я сузился, что это происходит только тогда, когда загружается обработчик закрытого представления и только когда я поворачиваю устройство в качестве вредоносного кода. Я также сузился, это проблема памяти. Я установил приложение, которое отслеживает используемую и доступную память. Моя память идет от 400 МБ до 900 МБ, когда я вращаю устройство несколько раз. Я пытаюсь дать как можно больше информации. Каждая точка зрения имеет 8 NSTimers, которые срабатывают каждую секунду.

Есть ли способ программно выгрузить представление, чтобы убедиться, что он разгружается?

Я включил этот код, чтобы обеспечить загрузку и разгрузку:

`- (Недействительными) setView: (UIView *) AView { NSLog (@ ">>> Ввод% s < < <", PRETTY_FUNCTION);

if (!aView)   // view is being set to nil 
{ 
    NSLog(@"Should be unloading now"); 
} 

[super setView:aView]; 

NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__); 

}

результат

журнала: 2013-04-22 16: 42: 03,588 XXXXXXXX [XXXXXXX] >>> Ввод - [GraphViewController setView:] < < < 2013-04-22 16 : 42: 03,589 XXXXXXXX [XXXXXXX] < < < Оставляя - [GraphViewController setView:] >>>

` Я не уверен, что мне нужно смотреть на то, чтобы исправить это.

Любые «баллы» в правильном направлении будут очень благодарны.

Благодаря

ответ

2

Вы не дали много информации о том, как вы «разгрузить» SecondViewController. Вы тоже делаете модальный переход? Если это так, это ваша проблема - каждый раз, когда вы выполняете segue, вы создаете новый контроллер представления, и если это модальные сегменты, представленный контроллер имеет сильный указатель на контроллер представления, поэтому ни один из этих контроллеров никогда не будет освобожден как вы идете туда и обратно.

Как правило, вы никогда не должны идти назад в раскадровке, используя что-либо, кроме разматывания. Итак, решение вашей проблемы состоит в том, чтобы использовать перерыв для перехода из SecondViewController обратно в MainViewController - это фактически вернется к тому же экземпляру MainViewController, из которого вы пришли, и SecondViewController будет освобожден. Если вы не знаете, как сделать разматывание, я отредактирую свой ответ, чтобы показать вам, как это сделать.

После Edit:

сделать UNWIND перетекает, сделать две вещи. В контроллере, к которому вы возвращаетесь, вы добавляете метод - две важные вещи - это IBAction и что у него есть единственный аргумент, который вводится в UIStoryboardSegue *.Неважно, как вы это называете, и даже не нужно иметь какой-либо код внутри него, хотя я обычно добавляю оператор журнала, чтобы убедиться, что он вызван. Затем, в IB в контроллере, из которого вы отключаетесь, вы управляете перетаскиванием из вашего элемента пользовательского интерфейса, как элемент кнопки или таблицы (или из самого контроллера, если вы хотите его запустить из кода), вплоть до зеленого значка выхода на в нижней части сцены - важно отметить, что вы перетаскиваете элемент UI в значок выхода в том же контроллере, а не между контроллерами. Когда вы отпустите перетаскивание по значку выхода, вы увидите какие-либо методы, которые вы создали с подписью, упомянутой выше. Выберите тот, который вы хотите, и все. Вы можете реализовать prepareForSegue в исходном контроллере, как и любой другой сегмент, если вы хотите передать любую информацию обратно контроллеру назначения.

+0

Благодарим за ценную информацию. Я не знал, что нужно идти назад. У меня нет опыта в том, чтобы расслабиться. Если у вас есть выборка, это будет здорово. Еще раз спасибо! – Eric

+0

У меня нет элемента пользовательского интерфейса, который используется для загрузки/umload второго диспетчера представлений. Я использую код ниже. – Eric

+0

@ Эрик, тогда, как я уже сказал, вы перетаскиваете с самого контроллера (его значок в нижней панели) на значок выхода. В этом случае вам нужно указать segue идентификатор, чтобы вы могли использовать его в коде. – rdelmar

Смежные вопросы