performSelectorOnMainThread

performSelectorOnMainThread

撕开我的头发,任何想法或建议将不胜感激。

我有一个从子线程本身调用performSelectorOnMainThread:withObject:waitUntilDone:的对象。 95%的时间都可以正常工作。自从iOS Betas发布以来,每隔一段时间,设备就会拒绝执行performSelectorOnMainThread:withObject:waitUntilDone:调用...没有错误消息,它不会崩溃,我无法使设备进入“失败”的状态”,但一旦出现该错误,它将继续失败,直到我删除并重新安装该应用程序,或强制其退出,然后调整其位置服务限额,然后再次启动,然后再次将其位置服务重新恢复正常。 ..重新启动设备无法修复它。重新安装而不先删除不能解决该问题。这很奇怪。。。我知道它在大多数情况下都可以工作,因为大多数设备都没有问题,但是有些设备会定期出现故障(可能每3或4天出现一次)。我知道特别是performSelectorOnMainThread:withObject:waitUntilDone:没有调用应有的功能,因为我现在有一个故障的设备,并且已经将NSLog放入应调用的方法中。它运行正常,但在出现故障的设备上,当使用performSelectorOnMainThread:withObject:waitUntilDone:调用该方法时,NSLog显示它未在运行。

这始于iOS 5 beta,再次发生于发布时。它最常在我的2台设备上发生,但在我亲自测试过的其他10台设备上都没有。我以为它只是测试版中遇到问题的设备,但是它发生在从未接触过测试版的全新4S上,以及一个用户的iPad 2(而不是我的iPad 2)上。

我真的不知道在哪里看。我告诉它执行,它通常在几乎所有设备上都执行,但是在某些地方同一行没有响应,也没有错误等。

最佳答案

performSelectorOnMainThread:withObject:waitUntilDone有时可能很奇怪。您是否考虑过尝试使用lib dispatch?

您可以创建一个块并将其发布到主线程上,如下所示:

dispatch_async(dispatch_get_main_queue(), ^{
    <do work here>
});

与使用performSelectorOnMainThread:withObject:waitUntilDone的保存效果相同
http://developer.apple.com/library/ios/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html#//apple_ref/doc/uid/TP40008091-CH102-SW1

09-26 12:39