我有一个基于视图的应用程序,当我检查dealloc方法是否正常工作时,我看到了不...调试和调试,然后使用retainCount,我发现我的viewcontroller retaincount在程序启动时变得疯狂...它很容易重现......
只需启动一个基于视图的新应用程序模板,并在didFinishLaunchingWithOptions中启用:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after app launch.
NSLog(@"i1 %i",[viewController retainCount]);
[window addSubview:viewController.view];
NSLog(@"i2 %i",[viewController retainCount]);
[window makeKeyAndVisible];
return YES;
}
我上了控制台:
[Session started at 2010-08-07 09:57:34 -0300.]
2010-08-07 09:57:35.132 teste1[20367:207] i1 2
2010-08-07 09:57:35.138 teste1[20367:207] i2 8
这是对的吗?
然后当我按下iphone主页按钮关闭应用程序时,dealloc方法会被调用,我相信因为viewController的retainCount ....我是对的?
这是苹果的视图应用程序模板......应该工作......不是吗?
有人可以解释一下为什么最初的零售额是2 ?????和其他8 ??? xib文件是空白的....
答案 0 :(得分:2)
只要您遵循内存管理规则,就不必担心对象的实际保留计数。框架可以保留或释放对象,因此保留计数将从您的控制中更改。
答案 1 :(得分:1)
终止应用时,您可能无法获得dealloc。这不是测试的方式。并且根视图控制器始终存在于应用程序中。您应该关注自己创建的其他类,并确保在调用它们时调用它们的dealloc(而不是在终止时)。而且也不要依赖retainCount。 Apple建议无处使用它。
假设您有两个视图和相应的视图控制器,而不是根视图控制器。在第一个视图中,您已创建其他对象。现在切换到第二视图时,如果不需要,您应该释放第一个视图的内存。在这种情况下,您应该测试第一个视图的对象是否已经被释放。如果你已经用这种方式编码但是它们没有被调用,则必须有泄漏。但是,是的,你不应该在应用终止时测试这个。