iOS - MultiView应用程序 - 内存问题

时间:2011-09-09 12:00:46

标签: iphone ios memory memory-leaks multiview

我有一个MultiView应用程序,我有一些内存问题,我会很感激一些建议.. 我有一个应用程序,它最初加载一个开关控制器,使用户可以在一些视图之间切换。在应用程序期间的某些时候我想删除switchview控制器并向窗口添加另一个子视图。因此,我获得了对共享应用程序的委托的访问权限并删除了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中,我希望获得对我的App的委托的访问权,删除当前的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 个答案:

答案 0 :(得分:1)

你的方法听起来很合理,但有更好的方法来测试,而不仅仅是眼球。使用Mac附带的Instruments工具测试是否存在泄漏。

另外,作为旁注,有一种更好的转换方式

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

希望这有帮助。