Iphone 基于视图的应用程序-viewcontroller在[window addSubview:viewcontroller.view]之后重新计数;

Iphone 基于视图的应用程序-viewcontroller在[window addSubview:viewcontroller.view]之后重新计数;,iphone,viewcontroller,retaincount,Iphone,Viewcontroller,Retaincount,我有一个基于视图的应用程序,当我检查dealloc方法是否工作时,我看到它没有…调试和调试,然后使用retainCount,我发现我的viewcontroller retainCount在程序启动时变得疯狂…它很容易复制 只需启动一个新的基于视图的应用程序模板,然后在didFinishLaunchingWithOptions中: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDi

我有一个基于视图的应用程序,当我检查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 home按钮关闭应用程序时,dealloc methos从未被呼叫过,我相信这是因为viewController的重新计数。。。。我是对的

这是苹果的视图应用程序模板…应该可以工作…不是吗


有人能解释一下为什么最初的重新计数是2吗?????另外8个呢???xib文件是空的……

只要遵循内存管理规则,就不必担心对象的实际保留计数。框架可能保留或释放对象,因此保留计数将在您无法控制的情况下更改

终止应用程序时,您可能无法调用dealloc。这不是测试的方式。应用程序中始终存在根视图控制器。您应该关心您自己创建的其他类,并确保它们的dealloc在需要调用时被调用(而不是在终止时)。也不要依赖于重新计算。苹果建议在任何地方都不要使用它


假设您有两个视图和相应的视图控制器,而不是根视图控制器。在第一视图中,您已经创建了其他对象。现在,当切换到第二视图时,如果没有必要,您应该释放第一视图的内存。在这种情况下,您应该测试第一个视图的对象是否真的被释放。如果您以这种方式编码,但他们没有被调用,那么肯定存在泄漏。但是,是的,你不应该在应用程序终止时测试这个

alloc后的初始保留计数为1。您并不是在分配之后立即进行日志记录,而是在框架有机会执行某些活动的一段时间之后进行日志记录。再说一次,你不必担心保留计数,因为你不太可能用这种技术发现你的内存管理错误,只要遵循规则,你应该会没事的。好的,谢谢你的回答…但是我在其他一些dealloc方法上放了一些NSLOG,当我按下home(主页)按钮时,它们并没有被调用……我应该担心吗?@costamatrix:如果它们在你的应用程序的整个生命周期中都存在,那么不用担心,系统会在你的应用程序终止后清理它们。若在应用程序生命周期中有一些东西应该动态创建和销毁,而您并没有看到dealloc方法被调用,那个么您应该开始担心了。