iOS - MultiView Application - Проблемы с памятью - PullRequest
1 голос
/ 09 сентября 2011

У меня есть приложение MultiView, и у меня есть некоторые проблемы с памятью, и я был бы признателен за несколько советов. У меня есть приложение, которое первоначально загружает контроллер переключателя, который позволяет пользователю переключаться между некоторыми представлениями.В какой-то момент во время приложения я хочу удалить контроллер viewview и добавить другое подпредставление в окно. Поэтому я получил доступ к делегату общего приложения, удалил контроллер switchview и вставил второй. Я не понимаюесли это правильный подход, и я боюсь, что произойдет утечка памяти, так как я печатаю значение retainCount второго контроллера, и оно показывает 19 !!!!!

Ниже приведены снимки моего кода.. Это правильный подход?Как избежать этих утечек памяти?

Хорошо, в моем ApplicationDelegate у меня есть два контроллера представления, которые я также устанавливаю как свойства

MyAppDelegate.h

@class SwitchViewController;
@class SecondController;

@interface MyAppDelegate : NSObject <UIApplicationDelegate> {

    SwitchViewController *switchViewController;
    SecondController *secondController;  
}


@property (nonatomic, retain) IBOutlet SwitchViewController *switchViewController;
@property (nonatomic, retain) IBOutlet SecondController *secondController;

@property (nonatomic, retain) IBOutlet UIWindow *window;

@end

в файле .m, который я добавляю

[self.window addSubview:switchViewController.view];
[self.window makeKeyAndVisible];

обратите внимание, что я синтезирую эти контроллеры и освобождаю их в функции dealloc

Теперь вот моя проблема!В SwitchViewController.m я хочу получить доступ к делегату моего приложения, удалить текущий SwitchViewController и поместить свой secondController в качестве подпредставления окна:

 SwitchViewController.m

 SecondController *secondController2= [[SecondController alloc] init];

 MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];

 [appDelegate.switchViewController.view removeFromSuperview];

  appDelegate.secondController = secondController2;

  [appDelegate.window addSubview:appDelegate.secondController.view];

  [secondController2 release]; 

Вот вопрос.Когда я распечатываю [appDelegate.secondController retainCounter], я получаю 19. Это правильный подход.Есть ли у меня утечки памяти?

Заранее спасибо,

Андреас

1 Ответ

1 голос
/ 09 сентября 2011

Ваш подход выглядит надежным, но есть более эффективные способы проверки, чем просто наглядность. Используйте инструмент Instruments, который поставляется с вашим Mac, чтобы проверить, нет ли утечек.

Также, как примечание, есть более хороший способ сделать переходы

[UIView transitionFromView:appDelegate.switchViewController.view 
                    toView:appDelegate.secondController.view
                  duration:1.0 
                   options:UIViewAnimationOptionTransitionNone 
                completion:nil];

Надеюсь, это поможет.

...