iOS中的多线程
2016-05-09 00:00
405 查看
多线程
第一种:NSThread
第二种:NSOperation
第三种:Grand Central Dispatch (GCD)
第一种:NSThread
#import "ViewController.h" @interface ViewController () //这里通过界面拖动创建了一个UIImageView,用于将多线程的图片显示在界面上 @property (weak, nonatomic) IBOutlet UIImageView *imgView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //创建多线程,添加一个方法,object传的参数是一个图片的网址 NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(loadData:) object:@"http://pic4.nipic.com/20091102/3530505_133139096223_2.jpg"]; //开启多线程 [thread start]; } -(void)loadData:(NSString *)str{ //**********这里注意:Xcode在工作中往往会出现无法兼容网址,所以要在app的加载里进行设置(在Info.plist文件中添加 App Transport Security Settings ,并且在其子列表中创建Allow Arbitrary Loads,选择Boolean为YES,这样可以正常引用链接。) //先将上面多线程中传的 NSString 转成 NSURL 类型的, //再将 NSURL 转成 NSData 类型的 //再将 NSData 转成 UIImage 类型的 NSURL *url = [NSURL URLWithString:str]; NSData *data = [NSData dataWithContentsOfURL:url]; UIImage *img = [UIImage imageWithData:data]; //如果图片生成成功 if (img) { //回到主线程,更新UI(这里的方法是将上面转换类型生成的图片,添加到界面上的 UIImageView 上) [self performSelectorOnMainThread:@selector(setImg:) withObject:img waitUntilDone:YES]; } } //将图片添加到界面上的 UIImageView 上的方法(实现) -(void)setImg:(UIImage *)img{ [self.imgView setImage:img]; }
第二种:NSOperation
#import "ViewController.h" @interface ViewController () //通过界面拖动,创建了一个UIImageView,用于显示线程中的图片 @property (weak, nonatomic) IBOutlet UIImageView *imgView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //创建线程队列 NSOperationQueue *op = [[NSOperationQueue alloc]init]; //创建线程 NSBlockOperation *bop = [NSBlockOperation blockOperationWithBlock:^{ [self loadImg:@"http://pic4.nipic.com/20091102/3530505_133139096223_2.jpg"]; }]; //把线程添加到队列中 [op addOperation:bop]; } //线程的方法 -(void)loadImg:(NSString *)str{ //**********这里注意:Xcode在工作中往往会出现无法兼容网址,所以要在app的加载里进行设置(在Info.plist文件中添加 App Transport Security Settings ,并且在其子列表中创建Allow Arbitrary Loads,选择Boolean为YES,这样可以正常引用链接。) //先将上面多线程中传的 NSString 转成 NSURL 类型的, //再将 NSURL 转成 NSData 类型的 //再将 NSData 转成 UIImage 类型的 NSURL *url = [NSURL URLWithString:str]; NSData *data = [NSData dataWithContentsOfURL:url]; UIImage *img = [UIImage imageWithData:data]; //如果图片生成成功 if (img) { //回到主线程,更新UI [[NSOperationQueue mainQueue]addOperationWithBlock:^{ //小细节: 将图片添加到界面上的UIImageView上,两种方法 // //第一种,直接添加 // [self.imgView setImage:img]; //第二种,通过方法添加 [self setImg:img]; }]; } } //第二种,将图片添加到UIImageView上的方法 -(void)setImg:(UIImage *)img{ [self.imgView setImage:img]; }
第三种:Grand Central Dispatch (GCD)
相关文章推荐
- IOS博客项目搭建-14-发微博自定义TextView输入框
- nagios插件之监控f5pool中cngw主机session数
- [iOS] stringWithFormat 和 initWithFormat 有何不同?
- ios loading视图动画(模仿58同城)
- ios 变速效果
- iOS数据持久化文件读写之偏好设置
- IOS常见异常捕获
- iOS开发中xcode错误和异常处理
- 仿进入GameCenter的五个气球效果
- 文件输入输出
- 史上最详细的iOS之事件的传递和响应机制
- iOS尺寸单位pt、ppi与px之间换算关系
- iOS数据存储方法总结
- iOS 添加ttf字体
- iOS(扇形的绘制)
- iOS(修改某一个字符串属性)
- iOS开发系列--打造自己的“美图秀秀”
- iOS 应用数据存储的常用方式
- IOS的三种定时器 GCD CADisplayLink NSTimer
- IOs内存管理(二)