对象神秘地被解除分配

时间:2011-01-24 06:45:20

标签: iphone objective-c ipad uitableview uisplitviewcontroller

我遇到的问题是某个对象以某种方式被解除分配。我使用了各种调试技术,如启用NSZombie等来查找有问题的对象。它是一个简单的NSMutable Array对象,我用它在分组的tableview中显示我的节标题。它是在函数中返回标题头的对象:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

我在上面提到的对象上使用objectAtIndex返回值。我确保它不会超出界限或任何东西。这个分组的tableView出现在我的自定义splitView控制器的左侧。这一切在肖像模式下工作正常,左侧有一个弹出窗口。没有问题。在它作为桌子出现的风景中,我有这个对象神秘地解除分配。拆分视图首先出现没有问题。然后我有一个模态视图。当我在顶部关闭这个模态视图时,节标题对象释放出神秘地崩溃模态下面的分割视图,该视图试图出现在模态消除上。

任何指针或线索?

由于

2 个答案:

答案 0 :(得分:0)

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

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

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

找出释放阵列的人的一种方法是:

创建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命令)。

答案 1 :(得分:0)

当您加载(或重新加载)阵列时,是否保留了它?