gpt4 book ai didi

ios - iPhone开发在dispatch_async中调用NSURLConnection并在mainRunLoop中读取didReceiveResponse

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:28 25 4
gpt4 key购买 nike

我想做的是获得对以下方法的响应

 - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { }

调用之后

NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[conn scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[conn start];

在一个

里面
dispatch_async();

但是 connection 方法没有调用。但是当我在 dispatch_async 之外运行 NSURLConnection 代码时,它会调用该方法。

这是什么原因,我该如何纠正?这是因为 delegate 指的是 selfself 指的是后台线程而不是 UIViewController 类本身吗?

最佳答案

由于您要创建一个在循环中安排并稍后启动的连接,因此请确保使用 initWithRequest 的再现并将 startImmediately 参数设置为 。现在,您正在启动连接两次。而且,更重要的是,您在主运行循环中安排它之前启动它。

要解决此问题,请将 startImmediately 指定为 NO:

NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[conn scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[conn start];

话虽如此,我认为根本没有必要将此代码分派(dispatch)到后台队列(因为 initWithRequest 异步运行,不会对应用程序性能产生明显影响)。我唯一一次使用上述模式是在我将我的 NSURLConnection 请求包装在一些自定义 NSOperation 子类中时(在这种情况下,上述模式非常有用)。但在这种情况下,这是不必要的。

关于ios - iPhone开发在dispatch_async中调用NSURLConnection并在mainRunLoop中读取didReceiveResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23493479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com