gpt4 book ai didi

iOS,NSURLConnection : Delegate Callbacks on Different Thread?

转载 作者:可可西里 更新时间:2023-11-01 03:09:41 25 4
gpt4 key购买 nike

我怎样才能让 NSURLConnection 从不同的线程而不是主线程调用它的委托(delegate)方法。我试图弄乱 scheduleInRunLoop:forMode: 但似乎没有按照我的意愿行事。

我必须下载一个大文件,它如此频繁地中断主线程,以至于正在发生的某些渲染开始变得不稳定。

NSURLRequest * request = [NSURLRequest requestWithURL:url];
NSURLConnection * connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
NSRunLoop * loop = [NSRunLoop currentRunLoop];
NSLog(@"loop mode: %@",[loop currentMode]);
[connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
[connection start];

我不太了解的另一件事是“模式”,只有两种模式被记录下来,所以没有太多可用于测试的东西。

有什么想法吗?

谢谢

最佳答案

有几个选项:

  1. 在委托(delegate)方法的实现中,使用dispatch_async
  2. 在后台线程上开始安排连接。

你可以像这样做后者:

// all the setup comes here
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSRunLoop *loop = [NSRunLoop currentRunLoop];
[connection scheduleInRunLoop:loop forMode:NSRunLoopCommonModes];
[loop run]; // make sure that you have a running run-loop.
});

如果您想保证正在运行的线程,请适本地替换对 dispatch_get_global_queue() 的调用。

关于iOS,NSURLConnection : Delegate Callbacks on Different Thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8221159/

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