调试无响应的iPhone UI

调试无响应的iPhone UI,iphone,user-interface,Iphone,User Interface,我有一个应用程序,需要每分钟左右更新一次显示。为了实现这一点,我使用了performSelector:withObject:afterDelay,调用选择器,大多数时候只是基于非常简单(快速)的计算更改标签中的一些文本 [self performSelector:@selector(updateDisplay) withObject:nil afterDelay:60]; 有时在更新过程中,我必须离开并从web获取一些数据,因此我在另一个线程中使用detachNewThreadSe

我有一个应用程序,需要每分钟左右更新一次显示。为了实现这一点,我使用了performSelector:withObject:afterDelay,调用选择器,大多数时候只是基于非常简单(快速)的计算更改标签中的一些文本

[self performSelector:@selector(updateDisplay) withObject:nil 
     afterDelay:60];
有时在更新过程中,我必须离开并从web获取一些数据,因此我在另一个线程中使用detachNewThreadSelector执行此操作。所有这些都正常工作,“performSelector after Delay”调用只需几秒钟的时间就可以完成,并且每分钟只运行一次。尽管如此,尽管在模拟器上运行良好,但应用程序中的单个按钮基本上没有响应,对多次刺杀没有响应

所以,我假设peformSelector:afterDelay不会阻塞,但我现在想知道它是否以某种方式阻塞?我甚至试着不做网络查找,以防这仍然会影响响应能力。没有快乐

[NSThread detachNewThreadSelector:@selector(updateFromURL) 
    toTarget:self withObject:nil];
然后我把它推过鲨鱼,看能不能看到任何明显的东西。从这里我可以看到web查找是唯一需要花费时间的事情,但它只是每隔几分钟进行一次,然后显然没有在主线程上运行。该应用程序本身在20分钟内消耗了1%的CPU(0.0000034%),所以它一定是一个阻塞问题


那么,我是否遗漏了一些关于performSelector的内容:afterDelay?我可能会犯什么其他常见的新手错误。如果有帮助的话,尽管我已经开发了20多年的应用程序,但前10年主要是Java。也许我加载了Java假设:-)本质上我假设主线程与EDT类似(只在其上执行UI操作,但不执行其他操作)。

试试performSelectorInBackground,并保留一个布尔信号量/或一个请求数队列如何


必须定义用例:如果按按钮进行mash,它应该执行一次请求,还是重复执行请求?

没有多个请求问题,它没有收到第一个请求。我做了一些大量的分析,没有发现任何真正有价值的东西(除了表明应该没有问题)。我现在已经重新考虑并使用了计时器,而不是performSelector:afterDelay似乎有所帮助,我怀疑这里有一些微妙的运行循环。