IOS開發(fā)中多線程的使用

字號:


    一、創(chuàng)建多線程的五種方式
    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("子線程 ");
    }
    }];
    5.開啟線程的方法五
    //第一步開啟線程池
    NSOperationQueue * queue=[[NSOperationQueue alloc] init];
    //設(shè)置并發(fā)數(shù)目
    [queue setMaxConcurrentOperationCount:2];
    //第二部創(chuàng)建多線程添加到線程池
    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];
    二、多線程應(yīng)用實例,加載圖片。
    1.核心思想
    考慮到如果加載網(wǎng)絡(luò)圖片會延遲,在一個主線程加載會影響控件的渲染,此時可以采取多線程,異步加載完成后刷新UI。
    2.實現(xiàn)思路
    通過為UIImageView 增加類目來實現(xiàn)多線程下載。
    主要代碼:
    #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];
    }
    }