我在使用 NSURLConnection 实例时遇到了这个问题,在使用任意数量的实例后,它们会停止工作并且从不调用其delegate
的方法。它们的工作方式如下:
[[NSRunLoop mainRunLoop] addPort:self.port forMode:NSDefaultRunLoopMode];
[_connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[self.connection start];
[[NSRunLoop mainRunLoop] run];
事实上,它们在使用了一些之后就停止工作了,这让我认为它们耗尽了任何资源(可能是主 runLoop 上的端口或其他资源)。
看起来一切都清理得很好
[_connection cancel];
[_connection release];
[[NSRunLoop mainRunLoop] removePort:self.port forMode:NSDefaultRunLoopMode];
[_port release];
[super dealloc];
你们觉得这种方法有什么问题吗?有什么想法他们可能会停止工作吗?
最佳答案
根据 Apple's documentation on NSRunLoop :
运行循环模式
NSRunLoop defines the following run loop mode.
extern NSString* const NSDefaultRunLoopMode;
extern NSString* const NSRunLoopCommonModes;
Constants NSDefaultRunLoopMode The mode to deal with input sources other than NSConnection objects.
我注意到您已经将 NSDefaultRunLoopMode 用于看起来像是 NSConnection 对象的对象,尽管没有看到您的其余代码我真的只是推测。您可以尝试使用的另一件事是 performSelector:onThread:withObject:waitUntilDone:
,因为您的某个连接可能陷入竞争状态。
关于ios - mainRunloop 上的 NSURLConnection 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21164955/