2011-01-24 54 views
0

我遇到一个问题,以某种方式得到释放的对象。我已经使用了各种调试技术,如使NSZombie等找到有问题的对象。它是一个简单的NSMutable Array对象,我用它在分组的tableview中显示我的节标题标题。它是从其中的标题标题是在函数返回的对象:对象神秘地得到释放

- (的NSString *)的tableView:(UITableView的*)的tableView titleForHeaderInSection:(NSInteger的)部分

其中I返回上使用objectAtIndex值上面提到的对象。我已经确保它不会超出界限或任何东西。这个分组的tableView出现在我的自定义splitView控制器的左侧。这一切在肖像模式下都可以正常工作,左侧出现弹出窗口。没有问题。在它作为一张桌子出现的风景中,我有这个对象神秘地释放自己。分割视图首先出现没有问题。然后我有一个模态的观点来。当我放弃顶部的这个模态视图时,部分头对象会释放神秘地撞击试图在模态关闭中出现的模态下的分割视图。

任何指针或线索?

谢谢

+0

向我们展示您的变量声明,属性,使用的地方以及任何其他相关的代码会有帮助。 – raidfive 2011-01-24 08:08:23

+1

显示您的代码! – Eiko 2011-01-24 08:47:36

回答

0

没有代码,它会很难找到问题。

崩溃是发生在真实的设备,模拟器还是两者?您是手动保留/分配和释放对象,还是将它放在自动释放池中?

通常检查您的viewDidUnload, viewWillDisappear, didReceiveMemoryWarning方法并确保您发布的所有内容都是以适当的方法重新创建的。 如果您在多个视图控制器中使用该数组,请确保在适当的点处保留并释放它在每个视图控制器中。

一个办法,找出是谁在释放阵列将是:

创建NSMutableArray的

的一个子类
@interface myNSMutableArray : NSMutableArray {} 
@end 

@implementation myNSMutableArray 
-(oneway void)release { 
    NSLog(@"Being released"); 
    NSLog(@"retainCount: %i", [self retainCount]); 
    [super release]; 
} 
@end 

更改你的神秘阵列来myNSMutableArray类型,2后增加一个破发点NSLog行以及调试器到达断点时要求GDB进行回溯(bt命令)。

+0

感谢您的所有输入。在代码方面,除了它是一个在接口中声明并在tableView的viewDidLoad中初始化的NSMutable数组之外,没有什么可以发布的。我已经到处检查并确保我不会释放它。我甚至尝试手动保留它。没用。在模拟器上崩溃。而这个tableView是唯一使用这个对象的控制器。我已经尝试了通常的alloc-init以及alloc-initWithArray,并确保我完全不释放它并手动保留它。希望有所帮助。 – Bourne 2011-01-24 07:48:59

0

当你加载(或重新加载)你的数组时,你保留了它吗?