2010-08-07 86 views
1

我有一个视图基于应用程序,当我检查,如果dealloc方法在干活,我看到那不...调试和调试,然后用retainCount,我发现,我的ViewController retaincount变得疯狂在程序启动...它容易重现....视图基于应用 - 后视图控制器retainCount [窗口addSubview:viewController.view];

刚开始一个新的观点基于应用程序模板,并在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的retainCount ....我是正确的?

这是苹果的视图应用程序模板...应该工作...犯规呢?

有人能解释我为什么最初retaincount为2 ?????另外8个厦门国际银行的文件是空白....

+0

初始保留计数后,页头是1.您没有登录权分配后,但过一段时间后,当框架有机会做一些活动。同样,您不必担心保留数量,因为使用这种技术不太可能发现您的内存管理错误,只需遵循规则,您应该没问题。 – Pablo 2010-08-07 13:13:58

回答

2

你不必,只要您遵循内存管理规则担心你的对象的实际保留计数。该框架可能会保留或释放对象,因此保留计数将在您的控制之外被更改。

+0

好,感谢您的回复.... BU我把一些NSLog的一些其他的dealloc方法,当我按下home键,他们不叫....我应该关心的是什么? – costamatrix 2010-08-07 13:47:38

+0

@costamatrix:如果他们是你的应用程序的整个生命过程中的生活,那么不用担心,系统会清除它们后您的应用程序将终止。如果在应用程序生命周期中有某些应该动态创建和销毁的东西,并且没有看到调用dealloc方法,那么您应该开始担心。 – Pablo 2010-08-07 14:09:17

1

您可能没有获得终止应用程序时叫的dealloc。这不是测试的方式。并且根视图控制器始终存在于应用程序中。你应该关心你自己创建的其他类,并确保它们的dealloc在被调用时(而不是在终止时)被调用。也不要依赖retainCount。 Apple建议不要使用它。

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