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{}
回到主线程
[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];
}
}
}
回到主线程
[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];
});
});
}
}