在调用[UIImageView setImage:]时,应用程序在变为活动状态后崩溃

时间:2011-02-04 17:00:40

标签: iphone multithreading crash background audiounit

我有一个应用程序,带有用于录制和播放音频的回调。从录制回调中,我调用一个函数来更新GUI:

[mainViewController performSelectorOnMainThread:@selector(updateGuiAfterOnset) withObject:nil waitUntilDone:NO];

它运行正常,但在我将应用程序发送到后台(使用设备的home按钮)并再次打开后,应用程序在第二次调用updateGuiAfterOnset后崩溃,具体而言,它拨打电话后崩溃:

[myUIImageView setImage:myUIImage];

我在applicationWillResignActiveapplicationDidBecomeActive中所做的唯一事情就是停止并启动audioUnit:

AudioOutputUnitStop(audioUnit);

AudioOutputUnitStart(audioUnit);

我的直觉是某些变量在前往后台/前台进程中搞砸了,但这只是猜测。

有什么想法吗?在多线程应用程序中使用后台时是否需要做任何推荐的事情?

编辑如果从主线程调用gui-updating-method(通过点击按钮),应用程序也会崩溃。

崩溃报告中的相关部分:

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000008
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                     0x000027d8 objc_msgSend + 16
1   UIKit                               0x00009738 -[UIImageView setImage:] + 140
2   TimeKeeper                          0x00002b7a -[MainViewController updateGuiAfterOnset] (MainViewController.m:89)
3   CoreFoundation                      0x0003e2e4 -[NSObject(NSObject) performSelector:withObject:] + 16

2 个答案:

答案 0 :(得分:1)

看起来myUIImage无效。它是自动释放还是手动重新发布。

答案 1 :(得分:1)

建议不保留myUIImageView。