OC里面, 程序的多线程执行是一个很重要的环节, 单线程的APP是不能满足用户体验的, 因为, 单线程的app过于单调, 并且运行多个程序的时候容易产生加载缓慢或者网络延迟的问题, 影响了用户体验肯定不是一个好的app, 所以我们要进行多线程的操作:
多线程分为三种类型:
1. NSThread:
初始化方法:
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector( ) object:nil];
// [thread start];
// [thread release];
便利构造器:
[NSThread detachNewThreadSelector:@selector( ) toTarget:self withObject:nil];
2.NSobject:
//在后台运行
[self performSelectorInBackground:@selector( ) withObject:nil];
3. (1)我们可以自定义一个NSOperation 来设置同步和并发
Operation *operation = [[Operation alloc] init];
//[operation start];
Operation *operation2 = [[Operation alloc] init];
//添加子线程 并设置他们的同步和并发
//NSOperationQueue 线程队列 (会自动调用他的start方法)
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue setMaxConcurrentOperationCount:1];//限制最大的并发数(若为1为同步)
[queue addOperation:operation];
[queue addOperation:operation2];
[operation2 release];
[operation release];
[queue release];
(2) 我们可以使用系统的多线程方法
// NSBlockOperation
NSBlockOperation *ope =[NSBlockOperation blockOperationWithBlock:^{
//block里面是多线程要执行的代码
}
}];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:ope];
[queue release];
//NSInvocationOperation
NSInvocationOperation *opera = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector( ) object:nil];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:opera];
[queue release];
GCD使我们开发过程中最常用的多线程方法,GCD大致有两种方式: 同步和并发:
步骤: 创建一个同步队列, 把Block中的内容放入同步队列中, 然后把队列和主线程异步执行
dispatch_queue_t queue = dispatch_queue_create("first", DISPATCH_QUEUE_SERIAL);
//把block中的内容(多线程的代码)放入同步队列中, 然后把队列和主线程异步执行(因为是C语言不能写自动释放池)
dispatch_async(queue, ^{
//显示到界面上, 所有根UI有关的内容全部都要在主线程上运行
dispatch_async(dispatch_get_main_queue(), ^{
});
});
}
GCD的并行队列
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
});
});
}