我正在开发一个iPhone应用程序,该应用程序必须与电话状态保持同步。我目前正在播放音频和/或与外部附件通信,因此我的应用程序可以在后台运行。因此,当有电话通话时,我会显示一个视图,告诉用户正在通话。我正在使用CTCallCenter(在我的appDelegate中使用实例变量)来响应电话状态,并且每次我测试是否有电话时都在分配该实例。 Bur在每次分配该实例时,有时会遇到关于“CUTWeakReference”类的奇怪崩溃。我想知道在应用程序处于后台或被挂起以防止崩溃发生时是否有使用CTCallCenter的最佳实践?谢谢
最佳答案
要考虑解决此问题的要点。
有一个iOS错误,导致CTCallCenter
类的实例在释放后有时会收到通知。与其实例化,使用和释放实例,不如保留并从不释放它们以解决该错误。[[CTCallCenter alloc] init]
必须在主队列中运行。它是线程安全的吗?最好只在主线程上调用它。
static CTCallCenter *netInfo; static dispatch_once_t dispatchToken;
if (!netInfo) {
dispatch_once(&dispatchToken, ^{
netInfo = [[CTCallCenter alloc] init];
});
}