//创建方式主要有两种:
//一调用就会立即创建一个线程来做事情
[NSThreaddetachNewThreadSelector:@selector(myThreadMainMethod:)toTarget:selfwithObject:nil];
//手动调用 start 启动线程时才会真正去创建线程
NSThread* myThread = [[NSThreadalloc]initWithTarget:self
selector:@selector(myThreadMainMethod:)
object:nil];
[myThread start];//启动线程
//获取当前线程
NSThread *current = [NSThreadcurrentThread];
//获取主线程
NSThread *main = [NSThreadmainThread];
2,NSOperation:
//执行任务主函数,线程运行的入口函数
-(void)start
//是否允许并发,返回YES,允许并发,返回NO不允许。默认返回NO
-(BOOL)isConcurrent
- (BOOL)isExecuting
//是否已经完成,这个必须要重载,不然放在放在NSOperationQueue里的NSOpertaion不能正常释放。
- (BOOL)isFinished
比如TestNSOperation:NSOperaion重载上述的4个方法,
声明一个NSOperationQueue,NSOperationQueue *queue = [[[NSOperationQueue alloc ] init]autorelease];
[queue addOperation:testNSoperation];
它会自动调用TestNSOperation里的start函数,如果需要多个NSOperation,你需要设置queue的一些属性,如果多个NSOperation之间有依赖关系,也可以设置,具体可以参考API文档。
(2)非并发执行
-(void)main
只需要重载这个main方法就可以了。
3、 GCD//获取一个全局串行队列
dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
//异步函数
dispatch_async(queue, ^{
NSLog(@"任务1所在的线程----%@",[NSThreadcurrentThread]);
});
//同步函数
dispatch_sync(queue, ^{
NSLog(@"任务2所在的线程----%@",[NSThreadcurrentThread]);
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
//执行耗时的异步操作
dispatch_async(dispatch_get_main_queue(), ^{
//回到主线程,执行UI刷新操作
});
});
//1.获取一个全局串行队列
dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
//2.把任务添加到队列中执行
dispatch_async(queue, ^{
//打印当前线程
NSLog(@"currentThread --- %@",[NSThreadcurrentThread]);
//3.从网络上下载图片
NSURL *url = [NSURLURLWithString:@"http://h.hiphotos.baidu.com/baike/w%3D268/sign=30b3fb747b310a55c424d9f28f444387/1e30e924b899a9018b8d3ab11f950a7b0308f5f9.jpg"];
NSData *data = [NSDatadataWithContentsOfURL:url];
UIImage *image = [UIImageimageWithData:data];
NSLog(@"图片加载完毕");
/*
//4.回主线程,展示图片
[_imageV performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
*/
dispatch_async(dispatch_get_main_queue(), ^{
_imageV.image = image;
//打印当前线程
NSLog(@"currentThread --- %@",[NSThreadcurrentThread]);
});
});