iOS多线程技术

1. NSObject多线程

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

[self performSelectorOnMainThread:@selector(intoForword) withObject:nil waitUntilDone:YES];


2. NSThread多线程

创建子线程

1.[NSThread detachNewThreadSelector:@selector(intoBackThread:) toTarget:self withObject:imageView];


  2. NSThread *thread =[[NSThread alloc] initWithTarget:self selector:@selector(intoBackThread:) object:imageView];

        [thread start];

在子线程中进行的操作需要autoreleasepool

@autoreleasepool{}


回到主线程

[imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];


3. NSOperation多线程

1.

//  利用队列设置同时并发的线程个数

    [self.queue setMaxConcurrentOperationCount:4];

    

    for (UIImageView *imageView in self.dataArray) {

        NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operationCilck:) object:imageView];

        //  队列(一定要记住)

        [self.queue addOperation:operation];  

    }



2.

@autoreleasepool {

    

        [self.queue setMaxConcurrentOperationCount:4];

        

        for (UIImageView *imageView in self.dataArray) {

            

            NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{

                

                [NSThread sleepForTimeInterval:1.0f];

                

    //          在线程中作多线程加载资源

                UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"NatGeo%02ld.png",(long)arc4random_uniform(17) + 1]];

                

    //          得到UI线程

                [[NSOperationQueue mainQueue] addOperationWithBlock:^{

            

                    [imageView setImage:image];  

                }];

            }];

            

            [self.queue addOperation:blockOperation];

        }

    }

}

子线程中进行的操作需要autoreleasepool

回到主线程

[imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];



4. GCD多线程


//  队列初始化(全局队列)

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);


//  同步:一步一步做  异步:同时做

    for (UIImageView *imageView in self.dataArray) {

    //  进入多线程

        dispatch_async(queue, ^{

            

            NSLog(@"%@",[NSThread currentThread]);

            UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"NatGeo%02ld.png",(long)arc4random_uniform(17) + 1]];

            

            dispatch_async(dispatch_get_main_queue(), ^{

                [imageView setImage:image];  

            });

        });

    } 

}














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值