我遇到的问题是某个对象以某种方式被解除分配。我使用了各种调试技术,如启用NSZombie等来查找有问题的对象。它是一个简单的NSMutable Array对象,我用它在分组的tableview中显示我的节标题。它是在函数中返回标题头的对象:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
我在上面提到的对象上使用objectAtIndex返回值。我确保它不会超出界限或任何东西。这个分组的tableView出现在我的自定义splitView控制器的左侧。这一切在肖像模式下工作正常,左侧有一个弹出窗口。没有问题。在它作为桌子出现的风景中,我有这个对象神秘地解除分配。拆分视图首先出现没有问题。然后我有一个模态视图。当我在顶部关闭这个模态视图时,节标题对象释放出神秘地崩溃模态下面的分割视图,该视图试图出现在模态消除上。
任何指针或线索?
由于
答案 0 :(得分: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
命令)。
答案 1 :(得分:0)
当您加载(或重新加载)阵列时,是否保留了它?