【发布时间】:2011-09-09 12:00:46
【问题描述】:
我有一个 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。这是正确的方法吗?我真的有内存泄漏吗?
提前致谢,
安德烈亚斯
【问题讨论】:
-
您不应该使用对象的保留计数。它很少用,经常会引起混乱。
-
好的,谢谢您的提示。不过,您是否建议这是在我的应用程序委托中的窗口上加载不同子视图的正确方法?内存安全吗?
标签: iphone ios memory memory-leaks multiview