iOS多线程的NSThread 方法
来源:互联网 发布:工程宝软件 编辑:程序博客网 时间:2024/05/19 02:26
一: NSThread是轻量级的多线程开发,使用起来也并不复杂,但是使用NSThread需要自己管理线程生命周期。
可以使用对象方法+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument直接将操作添加到线程中并启动,也可以使用对象方法- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(id)argument 创建一个线程对象,然后调用start方法启动线程。
在资源下载过程中,由于网络原因有时候很难保证下载时间,如果不使用多线程可能用户完成一个下载操作需要长时间的等待,这个过程中无法进行其他操作。下面演示一个采用多线程下载图片的过程,在这个示例中点击按钮会启动一个线程去下载图片,下载完成后使用UIImageView将图片显示到界面中。可以看到用户点击完下载按钮后,不管图片是否下载完成都可以继续操作界面,不会造成阻塞。
@interface KCMainViewController (){ UIImageView *_imageView;}@end@implementation KCMainViewController- (void)viewDidLoad { [super viewDidLoad]; [self layoutUI];}#pragma mark 界面布局-(void)layoutUI{ _imageView =[[UIImageView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame]; _imageView.contentMode=UIViewContentModeScaleAspectFit; [self.view addSubview:_imageView]; UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect]; button.frame=CGRectMake(50, 500, 220, 25); [button setTitle:@"加载图片" forState:UIControlStateNormal]; //添加方法 [button addTarget:self action:@selector(loadImageWithMultiThread) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button];}#pragma mark 将图片显示到界面-(void)updateImage:(NSData *)imageData{ UIImage *image=[UIImage imageWithData:imageData]; _imageView.image=image;}#pragma mark 请求图片数据-(NSData *)requestData{ //对于多线程操作建议把线程操作放到@autoreleasepool中 @autoreleasepool { NSURL *url=[NSURL URLWithString:@"http://images.apple.com/iphone-6/overview/images/biggest_right_large.png"]; NSData *data=[NSData dataWithContentsOfURL:url]; return data; }}#pragma mark 加载图片-(void)loadImage{ //请求数据 NSData *data= [self requestData]; /*将数据显示到UI控件,注意只能在主线程中更新UI, 另外performSelectorOnMainThread方法是NSObject的分类方法,每个NSObject对象都有此方法, 它调用的selector方法是当前调用控件的方法,例如使用UIImageView调用的时候selector就是UIImageView的方法 Object:代表调用方法的参数,不过只能传递一个参数(如果有多个参数请使用对象进行封装) waitUntilDone:是否线程任务完成执行 */ [self performSelectorOnMainThread:@selector(updateImage:) withObject:data waitUntilDone:YES];}#pragma mark 多线程下载图片-(void)loadImageWithMultiThread{ //方法1:使用对象方法 //创建一个线程,第一个参数是请求的操作,第二个参数是操作方法的参数// NSThread *thread=[[NSThread alloc]initWithTarget:self selector:@selector(loadImage) object:nil];// //启动一个线程,注意启动一个线程并非就一定立即执行,而是处于就绪状态,当系统调度时才真正执行// [thread start]; //方法2:使用类方法 [NSThread detachNewThreadSelector:@selector(loadImage) toTarget:self withObject:nil];}@end
0 0
- iOS多线程的NSThread 方法
- iOS多线程编程之NSThread的使用
- IOS多线程编程之NSThread的使用
- IOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- iOS多线程编程之NSThread的使用
- 基于ip地址的虚拟主机的配置
- 软件开发中的11个系统思维定律
- [D-X] 限位数对称制2整数 浮点数乘(除)法器
- Android Dialog用法
- 基于域名的虚拟主机配置
- iOS多线程的NSThread 方法
- Sqrt(x)算法详解
- Android 写在开始【安卓基础】
- Dubbo框架应用之(三)--Zookeeper注册中心、管理控制台的安装及讲解
- 循环打印一个菱形英文字母...
- java的cp命令
- 《C Primer Plus(第五版)中文版》第12章第1至8题
- 黑马程序员--c语言指向函数的指针
- sgu138: Games of Chess