您的位置:首页 > 移动开发 > IOS开发

苹果开发 笔记(55)NSURLConnection

2015-07-31 18:42 423 查看
今天继续挖苹果的坑,使用这个NSURLConnection 下载一个文件的时候却不知道为什么有个代理的方法不执行,查询了一些说是和线程有关系。但具体是怎样一回事还是有点郁闷当中。

[code]- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{ 
  //出现不执行情况
}


ios网络层优化深入浅出

文章讲述到这个问题。 引用当中文章 提及到一句话。NSURLConnection 执行异步请求下载的时候,connectionDidFinishLoading 却一点都不反应了。

网上一篇老外的文章提及这个问题解决方法,代码如下。但是测试过程中还是没有反应。不知道是测试问题还是其他逻辑写错了。反正这个问题还是没有解决到。

[code]NSString* url = @"http://your.url/here";
NSURL* nsurl = [NSURL URLWithString:url];
NSMutableURLRequest* urlReq = [[NSMutableURLRequest alloc] initWithURL:nsurl];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:urlReq delegate:self];
while(!finished) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
- (void) connectionDidFinishLoading:(NSURLConnection *)connection
{
finished = TRUE;
}


整个过程是异步的,但delegate方法永远会在主线程执行

后续继续探讨这个问题。

随后在code4pp 发现了一些下载加载的类库。先暂时收藏一下。

http://code4app.com/ios/TCBlobDownload/5294aeadcb7e8482788b4f7c

2015-8-2 更新

今晚看到AFNetWorking 这个类的时候,看到关于NSURLSession相关的封装,于是其实很疑惑,想想每次IOS升级后,有时候采取删减API 有时候则会新增一个新的代替的方案 性能更加优秀 。NSURLConnection 讲到历史 基于IOS 7.0 的版本,如果使用这个IOS 6.0的用法又得遭殃了。但是苹果提及到NSURLSession和 NSURLConnection 是并列。所以两者都可以选择其一,当然更高的版本会选择NSURLSession ,为了兼容则会使用 NSURLConnection 来设计。

AFNetWorking 2.x版本后续也有相关的介绍。

记录一个在做进度显示遇到一个小问题。

NSString format的时候怎样显示百分号,度娘一下 这里的代码如下

如果单纯写%百分号则会发出警告而且显示不出来,加上%% 两个这样符号则可以显示出来了。

[code]float value = 55f;
NSString *str = [NSString stringWithFormat:@"进度更新进度...%f%%",value ];

输出的时候 可以显示百分比了 【进度更新进度...55%】


2015-8-6日

关于同步与异步,NSURLConnection 支持同步与异步的获取数据的方式,同步会发生阻塞,异步则不会。有时候需要使用同步,有时候则采取异步会更加友善。使用场景不一样,两种方式为获取数据带来便利。

NSURLConnection 同样支持代理模式、

英文单词

Synchronous 同步

Asynchronous 异步

下面为异步请求返回数据处理,错误机制等

[code]+ (void)sendAsynchronousRequest:(NSURLRequest*) request
                          queue:(NSOperationQueue*) queue
              completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler NS_***AILABLE(10_7, 5_0);


下面为同步

[code] NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest  
                                          returningResponse:&response  
                                                      error:&error];  
 if(error == nil)
 {
  //处理数据如解析json数据

 }


检测版本号,登录 则使用同步较为适合 ,像图片获取等非及时性 采取异步更加适合避免阻塞带来问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: