iOS開發中多線程的使用

cg2y 9年前發布 | 13K 次閱讀 IOS iOS開發 移動開發

原文  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]; } }</pre>
    </div> </div>
 本文由用戶 cg2y 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!