源码下载地址:http://download.csdn.net/detail/robinson_911/9631415
先上图:
以下的两个demo都用到了我基于NSURLSession来封装的一个网络请求的block(后面附录TFNetWorkManager源码)
一. 利用NSURLSession来增量下载网络图片
#pragma mark -- 图片网络数据请求
- (void)loadImageFromNet
{
[[TFNetWorkManager sharedInstances] requestNetWork:requestPNGUrl
successBlock:^(NSData *netData, NSString *progressStr, BOOL isFinished)
{
[self.recieveData appendData:netData];
//在主线程中刷新界面
dispatch_async(dispatch_get_main_queue(), ^{
//增量下载网络图片,下载一点图片data,展示一点图片
CGImageSourceUpdateData(self.incrementallyImgSource, (CFDataRef)self.recieveData, isFinished);
self.imageRef = CGImageSourceCreateImageAtIndex(self.incrementallyImgSource, 0, NULL);
self.imageView.image = [UIImage imageWithCGImage:self.imageRef];
//CGImageRelease(self.imageRef); //ARC does not manage C-types, of which CGImage may be considered. You must release the ref manually when you are finished with CGImageRelease(image);
[self.progressLabel setText: progressStr];
if ([progressStr isEqualToString:@"100.00%"])
{
[self.progressLabel setText: @""];
}
});
} failure:^(NSError *error)
{
NSLog(@"-----failure---%@",error);
}];
}
二. 利用NSURLSession来增量json网络数据请求
#pragma mark -- json网络数据请求
- (void)loadJSONDataFromNet
{
//requestAppStoreInfoJsonUrl requestJsonUrl
[[TFNetWorkManager sharedInstances] requestNetWork:requestAppStoreInfoJsonUrl successBlock:^(NSData *netData, NSString *progressStr, BOOL isFinished)
{
// 处理每次接收的数据
[self.recieveData appendData:netData];
if ([progressStr isEqualToString:@"100.00%"])
{
//在主线程中刷新界面
dispatch_async(dispatch_get_main_queue(), ^{
[self.progressLabel setText: @"json数据下载完毕"];
});
NSString *jsonStr = [[NSString alloc] initWithData:self.recieveData encoding:NSUTF8StringEncoding];
NSData *jsonData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
NSError *errorInfo = nil;
NSDictionary *resultDict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&errorInfo];
NSLog(@"打印收到的json data:%@",resultDict);
}
} failure:^(NSError *error)
{
NSLog(@"-----failure---%@",error);
}];
}