我有一个应用程序,其中网络活动在其单独的线程中完成(并且网络线程不断从服务器获取数据并更新显示 - 显示调用在主线程上进行)。当用户注销时,主线程在网络线程上调用一个disconnect方法如下:
[self performSelector:@selector(disconnectWithErrorOnNetworkThread:) onThread:nThread withObject:e waitUntilDone:YES];
这个选择器大部分时间都会被调用,一切正常。但是,有时(可能十分之二)此调用永远不会返回(换句话说,选择器永远不会被执行)并且线程和应用程序只是挂起。任何人都知道为什么 performSelector 行为不正常?
请注意,我需要等到调用被执行,这就是为什么 waitUntilDone 为 YES,所以将其更改为 NO 对我来说不是一个选项。网络线程也运行其运行循环(我在创建线程时显式启动它)。
另请注意,由于数据传输的连续性,我需要明确使用 NSThreads 而不是 GCD 或操作队列。