【问题标题】:app crashes after becoming active, when calling [UIImageView setImage:]调用 [UIImageView setImage:] 时,应用程序在激活后崩溃
【发布时间】:2011-02-04 17:00:40
【问题描述】:

我有一个用于录制和播放音频的回调应用。从录制回调中,我调用了一个函数来更新 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

【问题讨论】:

    标签: iphone multithreading crash background audiounit


    【解决方案1】:

    看起来 myUIImage 无效。是自动释放还是手动释放错误。

    【讨论】:

    • 确实,我使用 [UIImage imageNamed:] 设置它,但我没有保留它(它保存在 C-struct 中,当然不能保留 - 现在我认为这是一个坏主意.. .)。应用进入后台时是否自动释放?
    【解决方案2】:

    这表明 myUIImageView 没有保留。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      相关资源
      最近更新 更多