Iphone 多个NSURL连接同时运行
在我的应用程序中,有一个函数可以通过HTTP URLConnection下载文件,并将收到的数据写入和附加到文件中。这是一些需要几分钟才能完成下载的音乐文件。在下载过程中,用户可能需要从服务器请求一些其他JSON数据 问题是,我遇到的是请求被延迟,直到第一次连接(下载音乐文件)完成。这两个对象被分成两个不同的对象,并由不同的类调用 我也尝试用NSThread启动它们Iphone 多个NSURL连接同时运行,iphone,ios,Iphone,Ios,在我的应用程序中,有一个函数可以通过HTTP URLConnection下载文件,并将收到的数据写入和附加到文件中。这是一些需要几分钟才能完成下载的音乐文件。在下载过程中,用户可能需要从服务器请求一些其他JSON数据 问题是,我遇到的是请求被延迟,直到第一次连接(下载音乐文件)完成。这两个对象被分成两个不同的对象,并由不同的类调用 我也尝试用NSThread启动它们 [NSThread detachNewThreadSelector: @selector(threadDownload) toTa
[NSThread detachNewThreadSelector: @selector(threadDownload) toTarget: self withObject: nil ];
但是,第二个请求仍在等待第一个请求完成,由于下载时间过长,第二个请求超时并出错
希望您能就如何克服这一问题发表意见 最好的方法是使用AsitpRequest。它很容易集成,可以为您处理所有并发的后台内容
以下是url:您可以尝试这个名为:,它可以做很多事情的库(几分钟前我刚刚发布了一些问题的相同答案)。您可以有多个请求(异步),这应该可以解决您的问题。它很容易使用。老实说,我不理解您的抱怨,因为默认情况下,NSURLConnection是异步的,除非您显式使用sendSynchronousRequest:returningResponse:error:。
对于“正常使用”,即:使用initWithRequest:delegate:初始化,然后调用start,该类将在后台线程中处理所有进程,并返回主线程仅调用指定的委托。使用GCD,这非常简单,所有线程都是透明完成的 例如:
__block NSMutableArray *imageURLList = [NSMutableArray array];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
for (Helper *siteURL in list) {
dispatch_async(queue, ^{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:siteURL]];
NSURLResponse *response;
NSError *error;
NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (urlData.length)
[imageURLList urlData];
});
}
请注意,块是异步执行的,因此可以使用sendSynchronousRequest:
如果循环不适用于您,只需发出单独的请求。您能否指导我在下载数据期间应如何执行某些操作?我需要将数据写入一个文件,同时,AVAudioPlayer将在下载完成之前读取并播放数据。我只看到“(void)requestFinished:(ASIHTTPRequest*)request“delegate”仅供使用,而不是类似“didreceivedata”的内容?您能否指导我在下载数据期间如何执行一些操作?我需要将数据写入一个文件,同时,AVAudioPlayer将在下载完成之前读取并播放数据。我只看到“(void)requestFinished:(ASIHTTPRequest*)request“委托”只供使用,而不是像“didreceivedata”这样的东西?我是按照您建议的方式完成的,但不是在循环中完成的。每个块从其自己的视图控制器调用相同的ispatch\u queue\u t queue=dispatch\u get\u global\u queue(,并在其中执行。但第二个NSURL连接似乎仍在等待第一个连接完成。