长期存在的线程不会调用performSelectorOnMainThread

时间:2013-04-15 14:28:59

标签: objective-c multithreading macos nsthread nsobject

我有一个工作线程,我通过一个由标志控制的循环保持活着。我需要线程在应用程序的长度内保持活动状态,因为它打开了与远程服务器的永久连接。

我启动该线程并使用以下方法调用其中的几个方法:

[worker performSelector:@selector(getBusy) onThread:worker withObject:nil waitUntilDone:NO];

这似乎工作正常,并调用该方法。在getBusy中的某个时刻,我尝试在主线程中调用一个方法:

[delegate performSelectorOnMainThread:@selector(gotBusy) withObject:nil waitUntilDone:NO

其中delegate是对启动单独线程的类的引用。

问题是gotBusy永远不会在主线程上被调用。我用NSLog()语句填充它,我看不到它们在控制台上打印。

我应该寻找什么来调试它?

2 个答案:

答案 0 :(得分:2)

首先,确保delegate不是零。其次,确保您的主事件循环未被阻止且未以模态模式运行。

答案 1 :(得分:0)

您是否有可能从未分配过delegate,因此您在零对象上调用performSelectorOnMainThread?您可以尝试将waitUntilDone设置为YES,这样您的工作线程就会阻止并让代理人完成其工作。