【问题标题】:an object is deallocated on iOS5, but not on iOS4. how to trace?一个对象在 iOS5 上被释放,但在 iOS4 上没有。如何追踪?
【发布时间】:2012-06-15 22:53:01
【问题描述】:

我有这个方法(别人写的!)

- (IBAction)showMasterPopover:(id)sender
{
if (_hiddenPopoverController && !(_hiddenPopoverController.popoverVisible)) {

// Inform delegate.
if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:popoverController:willPresentViewController:)]) {
[(NSObject <MGSplitViewControllerDelegate> *)_delegate splitViewController:self popoverController:_hiddenPopoverController  willPresentViewController:self.masterViewController];
}

// Show popover.
[_hiddenPopoverController presentPopoverFromBarButtonItem:_barButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

}
else if (_hiddenPopoverController.popoverVisible) 
{
    [_hiddenPopoverController dismissPopoverAnimated:YES];
}

}

经过几个非常可重现的步骤

[_hiddenPopoverController presentPopoverFromBarButtonItem:_barButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

使用以下内容使应用程序崩溃:

*** -[ServerFolderController respondsToSelector:]: message sent to deallocated instance 0x85a9080

这在 iOS5.x 上会崩溃,但在 iOS4 上不会。有任何想法吗 ? 从 Instruments 中我得知有一个 Zombie 对象。

我被难住了! 谢谢

【问题讨论】:

    标签: objective-c ios error-handling


    【解决方案1】:

    在 iOS5 中崩溃而不在 iOS4 中崩溃是正常的。根据我的个人经验,Apple 在 iOS5 中更改了许多内部“事物”,因此当 iOS4 中稳定时,我的应用程序可能会在 iOS5 中崩溃。但!!!在所有情况下,这都是我的错,我的错误是保留不足或自动释放错误。所以只有你可以在你的代码中找到“这个错误”。我认为您的委托对象有问题。

    【讨论】:

    • 我找到了导致崩溃的版本。感谢您的提示。
    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    相关资源
    最近更新 更多