iOS开发中多线程的使用

cg2y 6年前

原文  http://www.cnblogs.com/jerehedu/p/4343480.html


一、创建多线程的五种方式

1.开启线程的方法一

NSThread * thread=[[NSThread alloc] initWithTarget:self selector:@selector(_update) object:nil];

2.开启线程的方法二

[NSThread detachNewThreadSelector:@selector(_update) toTarget:self withObject:nil];

3.开启线程的方法三

[self performSelectorInBackground:@selector(_update) withObject:nil];

4.开启线程的方法四

NSOperationQueue *queue=[[NSOperationQueue alloc] init];      [queue addOperationWithBlock:^{          for(int i=0;i<50;i++){              printf("子线程\n");          }      }];

5.开启线程的方法五

//第一步开启线程池    NSOperationQueue * queue=[[NSOperationQueue alloc] init];  //设置并发数目  [queue setMaxConcurrentOperationCount:2];  //第二部创建多线程添加到线程池  NSInvocationOperation * thread1=[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(_update1) object:nil];  NSInvocationOperation *thread2=[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(_update2) object:nil];  [thread1 setQueuePriority:NSOperationQueuePriorityVeryLow];  [thread2 setQueuePriority:NSOperationQueuePriorityVeryHigh];  [queue addOperation:thread1];  [queue addOperation:thread2];

二、多线程应用实例,加载图片。

1.核心思想

考虑到如果加载网络图片会延迟,在一个主线程加载会影响控件的渲染,此时可以采取多线程,异步加载完成后刷新UI。

2.实现思路

通过为UIImageView 增加类目来实现多线程下载。

主要代码:

#import "UIImageView+thread.h"  @implementation UIImageView(load)  - (void) setImageWithUrl:(NSString *)url{    [self performSelectorInBackground:@selector(_loadImage:) withObject:url];  }  - (void) _loadImage:(NSString *)u{    @autoreleasepool {      NSURL *url=[NSURL URLWithString:u];      NSData *data=[NSData dataWithContentsOfURL:url];      UIImage *image=[UIImage imageWithData:data];      [self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];    }  }

</div> </div>