And*_*rew 0 url objective-c nsdata ios
我有这个代码下载网址的内容.url的内容只是指向另一个url的链接,因此根本不需要很长时间才能下载:
NSString *additional = @"test string";
NSString *urlString = [NSString stringWithFormat:@"http://tts-api.com/tts.mp3?&return_url=1&q=%@", additional];
NSLog(@"string: %@", urlString);
NSString *modifiedURLString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"modified url string: %@", modifiedURLString);
NSURL *url = [NSURL URLWithString:modifiedURLString];
NSLog(@"url: %@", url);
NSData *data = [NSData dataWithContentsOfURL:url];
NSLog(@"data length: %i", data.length);
Run Code Online (Sandbox Code Playgroud)
数据总是需要大约20秒才能返回,并且它出来的长度总是很小(应该是这样).这是日志:
string: http://tts-api.com/tts.mp3?&return_url=1&q=test string
modified url string: http://tts-api.com/tts.mp3?&return_url=1&q=test%20string
url: http://tts-api.com/tts.mp3?&return_url=1&q=test%20string
data length: 69
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果我将附加字符串作为单个单词,例如"test",它可以在几分之一秒内完成.
有多个单词的任何想法都会减慢我的速度?
这是一个需要很长时间才能生成答案的Web服务,您无法在代码中执行任何操作以使其更快.但是你真的不应该使用dataWithContentsOfURL:从远程服务器加载数据,因为你无法控制这需要多长时间.如果你在主线程上执行此操作,如果请求花费的时间过长,那么看门狗定时器将会杀死你的应用程序.
使用URL加载系统并以异步方式运行请求.这是一个简单的变体:
[NSURLConnection sendAsynchronousRequest: [NSURLRequest requestWithURL: url]
queue: [NSOperationQueue mainQueue]
completionHandler: ^( NSURLResponse *response, NSData *data, NSError *error ) {
// Process response in this log
}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1050 次 |
| 最近记录: |