如何检查实例何时MPMoviePlayerController
被释放?注意我已经将 NSZombieEnabled 设置为 YES 并选中。
有问题的代码在我的应用程序中的某些情况下运行良好。在另一个例子中,当带有moviePlayer控件的视图展开时,MPMoviePlayerDidEnterFullscreenNotification
回调方法被执行,并且在屏幕变黑并且从用户角度看应用程序冻结后不久。(不同的是这个在导航堆栈上有一个额外的 viewController)。它不会使应用程序崩溃。它仍在运行,但无法返回可用的 UI。
在调试器中,我检查实例“活动”的最后已知时间以获取其地址,检查并发现它已被释放:
2012-10-01 18:35:46.032 MyApp[930:907] -[MyMoviePlayerViewController moviePlayerDidEnterFullscreenNotification:](203): : moviePlayer = <MPMoviePlayerController: 0x1dba9420> loadState = 3
2012-10-01 18:36:05.280 MyApp[930:907] [MPAVController] Autoplay: Enabling autoplay
这里出现黑屏,所以我检查调试器:
(lldb) po 0x1dba9420
2012-10-01 18:37:38.656 MyApp[930:907] *** -[MPMoviePlayerController respondsToSelector:]: message sent to deallocated instance 0x1dba9420
(int) $0 = 498766880 [no Objective-C description available]
如果我检查其他类的其他已知实例,它们是活着的并且如预期的那样:
(lldb) po 0x1da12110
(int) $1 = 497099024 <MyDetailViewControllerWithTableView: 0x1da12110>
(lldb) po 0x1da1af70
(int) $2 = 497135472 <MyMasterTableViewController: 0x1da1af70>
(lldb) po 0x1da19be0
(int) $3 = 497130464 <NSFetchedResultsController: 0x1da19be0>
因此,重申一下,如何检查实例何时以及通过什么方式被释放或销毁?是否有可以使用的 Instruments 类型。Allocations 显示实例已分配,但现在不存在了....
我想我可以逐步跟踪,但这很乏味......能够在事件发生时设置条件并触发仪器(或调试器)停止会很棒。