我在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];
你们看到这种方法有什么问题吗?有什么想法可能会停止工作?
答案 0 :(得分:1)
根据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:
,因为您的某个连接可能会陷入竞争状态。