我有一个使用 NSURLConnection 下载一些数据的 NSOperation,它看起来有点像这样:
....
- (void)main
{
....
while (!self.isCancelled && !self.isLoaded)
{
[NSRunloop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NDate distantFutute]];
}
....
}
问题是连接不时挂起,并且由于没有其他源触发,循环一直在运行,没有机会取消操作。由于我的操作队列中有 1 个操作的限制,所以一切都卡住了。
问题是什么是这个问题的最佳解决方案。
- 使用更小的时间段(例如半秒)来代替 distinctFuture。(可能会吃掉额外的 CPU 周期)
- 尝试在 ivar 中存储对正在运行的线程的引用,并通过在操作的取消方法中对线程执行选择器来触发运行循环。(可能会导致我们在已经退出且将不再运行的运行循环上排队选择器,据我所知,这会导致泄漏)
或者也许还有另一种方式?