Iphone UIViewController保留计数问题

Iphone UIViewController保留计数问题,iphone,objective-c,ios,Iphone,Objective C,Ios,我正在用下面的代码创建一个新的UIViewController GameViewController *temp = [[GameViewController alloc] initWithNibName:@"GameViewController" bundle:nil]; NSLog(@"retain count%d", [temp retainCount]); temp.backgroundMusic = backgroundMusic; self.gameView = temp; [tem

我正在用下面的代码创建一个新的UIViewController

GameViewController *temp = [[GameViewController alloc] initWithNibName:@"GameViewController" bundle:nil];
NSLog(@"retain count%d", [temp retainCount]);
temp.backgroundMusic = backgroundMusic;
self.gameView = temp;
[temp release];     
[self presentModalViewController:gameView animated:YES];                
[gameView release];
但当我查看保留计数时,我的临时视图控制器返回4

这怎么可能??因为它是4,当我关闭视图控制器时,我无法将其从内存中删除,我的游戏正在进行。(我可以看到AI播放的效果)。

“你不应该使用
重新计数。”。下面是一个很好的描述,为什么不:

“您不应该使用
重新计数
”。下面是一个很好的描述,为什么不:

我建议您不要使用retainCount,因为它通常会提供有关对象实际重新计数的错误信息

只需遵循适当的内存管理实践!!!!这真的很简单,只要遵循NARC原则,只释放包含以下单词的对象:New Alloc Retain Copy。毒品!:)


我强烈建议您使用仪器中的内存泄漏工具,该工具会告诉您哪些对象未释放,哪些对象已释放,您正在尝试访问。

我建议您不要使用重新计数,因为它通常会提供有关对象实际重新计数的错误信息

只需遵循适当的内存管理实践!!!!这真的很简单,只要遵循NARC原则,只释放包含以下单词的对象:New Alloc Retain Copy。毒品!:)


我强烈建议您使用乐器中的内存泄漏工具,该工具会告诉您哪些对象未释放,哪些对象已释放,您正在尝试访问。

在GameViewController中,您是否已将背景音乐作为

- (void)viewDidLoad{
   //Other nils
   self.backgroundMusic = nil;
}
- (void)dealloc{
    //Other releases
    [backgroundMusic release];
    [super dealloc];
}

在GameViewController中,您是否发布了您的背景音乐

- (void)viewDidLoad{
   //Other nils
   self.backgroundMusic = nil;
}
- (void)dealloc{
    //Other releases
    [backgroundMusic release];
    [super dealloc];
}

永远不要使用retainCount,它不会按您认为的方式工作

如果需要查看对象的保留、释放和自动释放发生在何处,请使用工具:

在仪器中运行,在分配中将“记录参考计数”设置为on(必须停止记录才能设置选项)。使选择器运行,停止录制,搜索ivar(datePickerView),向下钻取,您将能够看到所有保留、释放和自动释放发生的位置


永远不要使用retainCount,它不会按您认为的方式工作

如果需要查看对象的保留、释放和自动释放发生在何处,请使用工具:

在仪器中运行,在分配中将“记录参考计数”设置为on(必须停止记录才能设置选项)。使选择器运行,停止录制,搜索ivar(datePickerView),向下钻取,您将能够看到所有保留、释放和自动释放发生的位置


[gameView版本]应为self。gameView=nil;(取决于您是否已使用retain声明gameView属性)[gameView release]应为self.gameView=nil;(取决于您是否使用retain声明了gameView属性)我得到的是返回的retain计数不正确。那么你认为我的问题是什么??为什么在我关闭viewcontroller后,我可以在主菜单中听到角色的移动音乐??您应该在
viewwilldiscover
方法中停止音乐。不要试图用
retainCount
方法来解决这个问题。这不仅仅是音乐的问题。我的dealloc方法也不起作用,音乐播放意味着AI函数正在开始工作??告诉我,gameView属性是如何声明的。我得到的是返回的保留计数不正确。那么你认为我的问题是什么??为什么在我关闭viewcontroller后,我可以在主菜单中听到角色的移动音乐??您应该在
viewwilldiscover
方法中停止音乐。不要试图用
retainCount
方法来解决这个问题。这不仅仅是音乐的问题。我的dealloc方法也不起作用,音乐播放意味着AI功能正在开始工作??告诉我,你的gameView属性是如何声明的。最后,有人演示了如何使用分配工具跟踪保留计数!非常感谢。最后,有人演示了如何使用分配工具跟踪保留计数!谢谢大家!@B嗯,对不起,我把它留作参考。不过,现在更新了我的答案。@b嗯,很抱歉,我把它留作参考。不过,现在更新了我的答案。