【问题标题】:NSURLConnection did not work after cancel and immediately createNSURLConnection 在取消并立即创建后不起作用
【发布时间】:2014-12-23 10:06:09
【问题描述】:

我使用 NSURLConnection 建立到服务器的长轮询连接,有时我想取消连接并再次重建连接。一开始,我是这样写代码的

[self.connect cancel];
self.connect = [NSURLConnection connectionWithRequest:request delegate:self];
[self.connect start];

但我发现在此取消和启动后无法再调用连接委托。 所以我使用调度

[self.connect cancel];
dispatch_async(dispatch_get_main_queue(), ^{
    self.connect = [NSURLConnection connectionWithRequest:request delegate:self];
    [self.connect start];
});

此时似乎一切正常,但我仍然不知道为什么第一选择(没有调度)不起作用?

【问题讨论】:

    标签: ios nsurlconnection


    【解决方案1】:

    NSURLConnection 需要一个 runloop 来运行,默认情况下,在主线程上有一个。

    但是,如果您在非主线程上运行连接,则需要自己提供。

    您可能希望使用带有NSURLConnection 的操作队列进行调查(例如,您可以设置委托的NSOperationQueue 或在特定队列上启动异步连接)。

    【讨论】:

    • 对不起,我确实很理解这行“(例如,您可以设置委托的 NSOperationQueue 或在特定队列上启动异步连接)”,您的意思是,我上面使用的 gcd 是改为使用操作队列?
    • @ximmyxiao 是的,这只是误导(我会更正)。
    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多