Iphone 调用[UIImageView setImage:]时,应用程序在激活后崩溃
我有一个用于录音和播放音频的回调应用程序。在录制回调中,我调用一个函数来更新GUI:Iphone 调用[UIImageView setImage:]时,应用程序在激活后崩溃,iphone,multithreading,crash,background,audiounit,Iphone,Multithreading,Crash,Background,Audiounit,我有一个用于录音和播放音频的回调应用程序。在录制回调中,我调用一个函数来更新GUI: [mainViewController performSelectorOnMainThread:@selector(updateGuiAfterOnset) withObject:nil waitUntilDone:NO]; 它工作正常,但在我将应用程序发送到后台(使用设备的主页按钮)并再次打开后,该应用程序在第二次调用UpdateGuiAfterStart后崩溃,具体而言,它在调用以下命令后崩溃: [myU
[mainViewController performSelectorOnMainThread:@selector(updateGuiAfterOnset) withObject:nil waitUntilDone:NO];
它工作正常,但在我将应用程序发送到后台(使用设备的主页
按钮)并再次打开后,该应用程序在第二次调用UpdateGuiAfterStart
后崩溃,具体而言,它在调用以下命令后崩溃:
[myUIImageView setImage:myUIImage];
我在应用程序WillResignActive
和应用程序IDBecomeActive
中所做的唯一事情是停止和启动音频单元:
AudioOutputUnitStop(audioUnit);
及
我的直觉是,在进入背景/前景的过程中,一些变量被搞乱了,但这只是一个猜测
有什么想法吗?当我在多线程应用程序中进入后台时,有什么建议我需要做的事情吗
编辑如果从主线程调用gui更新方法(通过点击按钮),应用程序也会崩溃
事故报告中的相关部分:
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
看起来myUIImage无效。它是自动删除的还是手动重新生成的。这表明myUIImageView没有保留。事实上,我是用
[UIImageName:][/code>设置它的,但我没有保留它(它保存在C结构中,当然不能保留-现在我看到这是个坏主意…)。当应用程序转到后台时是否自动释放?
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