我的应用程序崩溃有时会发生,我测试了僵尸已启用,并且这个方法发现它是ZOMBIE,这种方法通常可以正常工作,但在某些条件下,如在某些情况下来回导航很多,它会崩溃。
我在@property中保留了datepickerView并以deaaloc发布。
答案 0 :(得分:1)
在dealloc中将datePickerDelegate设置为nil。如果它在第一次实例化后具有retain属性,则委托可能在其中具有死引用,并且在启用Zombies时将随机导致创建和崩溃。发生崩溃是因为保留属性释放了先前的值,如果它是一个死引用崩溃随后发生 - 随机。同时最好将代理设置为分配,而不是保留。
在仪器中运行,在分配中设置“记录参考计数”(您必须停止记录以设置选项)。导致选择器运行,停止记录,搜索那里的ivar(datePickerView),向下钻取,你将能够看到所有保留,释放和自动释放发生的位置。
答案 1 :(得分:0)
我认为没有理由在从堆栈中弹出选择器之后将其保留在内存中......
不是保留DatePickerController,而是在presentSemiModalViewController之后删除“autorelease”和“release”,根据SemiModelDatePicker上的reednj帖子
TDDatePickerController* datePickerView = [[TDDatePickerController alloc]
initWithNibName:@"TDDatePickerController"
bundle:nil];
datePickerView.delegate = self;
[self presentSemiModalViewController:datePickerView];
[datePickerView release];
希望这可以缓解这个问题。否则,它可能只是SemiModalDatePicker扩展的问题。