用GCD的方式,加载网络图片(主线程加载图片+类扩展方式)
来源:互联网 发布:php用什么软件编程 编辑:程序博客网 时间:2024/05/18 06:41
用GCD的方式,加载网络图片(主线程加载图片+类扩展方式)
用两种方法来实现网络加载图片
方法1:实现的效果:先加载背景色灰色,两秒后加载图片
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor=[UIColor grayColor];
//刷新UI(在主线程中刷新UI!!!) --- 一般方法
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString * path=@"http://www.sinaimg.cn/dy/slidenews/4_img/2015_12/704_1579347_398766.jpg";
NSData * data=[NSData dataWithContentsOfURL:[NSURL URLWithString:path]];
UIImage * image=[UIImage imageWithData:data];
NSLog(@"%@",[NSThread currentThread]);
//返回主线程
dispatch_sync(dispatch_get_main_queue(), ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"%@",[NSThread currentThread]); //测试代码---看看该处是否回到主线程
self.imageView.image=image; //为image赋值
});
});
}
方法2:类扩展(封装类)
#import "UIImageView+loadImage.h"
@implementation UIImageView (loadImage)
- (void) loadImageWithPath:(NSString *)path defaultImage:(NSString *) dafaultPath
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//在block内部不能直接给外部的变量赋值,需要转一下类型
__block NSString * str = path;
if (path==nil)
{
str=dafaultPath;
}
else
{
NSData * data=[NSData dataWithContentsOfURL:[NSURL URLWithString:path]];
UIImage * image=[UIImage imageWithData:data];
[NSThread sleepForTimeInterval:2];
//返回主线程
dispatch_sync(dispatch_get_main_queue(), ^{
self.image=image;
});
}
});
}
@end
在viewController.m文件中导入#import "UIImageView+loadImage.h" 然后调用类扩展方法
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor=[UIColor grayColor];
NSString * path=@"http://www.sinaimg.cn/dy/slidenews/4_img/2015_12/704_1579347_398766.jpg";
[self.imageView loadImageWithPath:path defaultImage:nil];
}
就两种方法比较而言,还是类扩展的方法比较好,如果以后遇到需要网络加载图片的问题,可以将封装好的类拿过来直接用。
- 用GCD的方式,加载网络图片(主线程加载图片+类扩展方式)
- IOS 加载网络图片的方式对比
- GCD网络加载图片
- Cocos2d加载图片的方式
- Cocos2d加载图片的方式
- 图片加载的基本方式
- 图片的加载处理方式
- Android imageloader加载网络,本地图片方式
- Android imageloader加载网络,本地图片方式
- android 加载图片方式
- android 加载图片方式
- xib加载图片方式
- 加载图片方式
- 图片预加载方式
- android 图片加载方式
- iOS 图片加载方式
- Android 图片加载方式
- Picasso图片加载方式
- 掐二八变牌视频◤】【在线演示QQ:194714506】
- 普通扑克控牌▂◇【在线演示QQ:194714506】
- 八大排序算法
- 普通扑克控牌技巧◢※【在线演示QQ:194714506】
- Druid使用ConfigFilter
- 用GCD的方式,加载网络图片(主线程加载图片+类扩展方式)
- 普通扑克控牌教学⌒█【在线演示QQ:194714506】
- linux libjpeg库的安装方法
- 普通扑克控牌教程╮【【在线演示QQ:194714506】
- 普通扑克控牌方法▽■【在线演示QQ:194714506】
- 线性表的基本操作(单链表)
- 普通扑克控牌手法︼♂【在线演示QQ:194714506】
- 实现用户名及密码记住功能(SharedPreferences的用法)
- Druid是什么