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

字號(hào):


    一、創(chuàng)建多線程的五種方式
    1.開(kāi)啟線程的方法一
    NSThread * thread=[[NSThread alloc] initWithTarget:self selector:@selector(_update) object:nil];
    2.開(kāi)啟線程的方法二
    [NSThread detachNewThreadSelector:@selector(_update) toTarget:self withObject:nil];
    3.開(kāi)啟線程的方法三
    [self performSelectorInBackground:@selector(_update) withObject:nil];
    4.開(kāi)啟線程的方法四
    NSOperationQueue *queue=[[NSOperationQueue alloc] init];
    [queue addOperationWithBlock:^{
    for(int i=0;i<50;i++){
    printf("子線程 ");
    }
    }];
    5.開(kāi)啟線程的方法五
    //第一步開(kāi)啟線程池
    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)用實(shí)例,加載圖片。
    1.核心思想
    考慮到如果加載網(wǎng)絡(luò)圖片會(huì)延遲,在一個(gè)主線程加載會(huì)影響控件的渲染,此時(shí)可以采取多線程,異步加載完成后刷新UI。
    2.實(shí)現(xiàn)思路
    通過(guò)為UIImageView 增加類目來(lái)實(shí)現(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];
    }
    }