IOS開發中多線程的使用
一、建立多線程的五種方式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]; }}