说到多线程,首先得了解几个专业名词.
1. 程序:由源代码生成的可执行应用.(例如: QQ.app)
2. 进程:一个正在运行的程序就可以看做一个进程, 进程拥有独立运行所需的全部资源.
一个进程是由一个或多个线程组成. 进程只负责资源的调度和分配; 线程负责代码的执行, 是程序真正的执行单元.
每个正在运行的程序, 至少包含一个线程, 这个线程叫主线程, 主线程在程序启动时创建, 用于执行main函数.
多线程一般使用在这三种情况:1.有大量的运算(如: for循环) 2.数据读取(如:本地读取, 数据库查询) 3.网络请求(如:同步get)
ios有四种多线程的编程技术, 分别是:
1 NSThread 是一个轻量级的多线程, 但是需要自己管理线程的生命周期, 线程同步.
2 NSObject
3 NSOperation和NSOperationQueue
4 GCD(全称:Grand Central Dispatch)
1.1 NSThread有两种直接创建方式:
+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;
- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;
第一种是类方法, 由类来调用; 第二种是实例方法, 由对象来调用;如下图
1.2 参数的意义
target:selector发送的对象
selector:是程序所执行的方法, 该方法没有返回值.
object:一个参数,传输给target,可以是nil.
2.1 NSObject的创建方式如下:
[self performSelectorInBackground:@selector(create) withObject:nil]
3.1 NSOperation和NSOperationQueue其创建方式:
一但一个操作被加入队列, 该队列就会启动并开始处理它(即调用该操作类的main方法), 一但该操作完成队列就会释放它.
首先创建一个继承与NSOperation的类MainOperation, 重写其main方法,则有:
MainOperation *action = [[MainOperation alloc] init];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:action];
[action release];
[queue release];
4.1 GCD的创建
例子1:创建一个同步线程
第一步:创建一个同步线程队列
dispatch_queue_t queue = dispatch_queue_create("first", DISPATCH_QUEUE_SERIAL);
第二步:异步执行同步线程对列
dispatch_async(queue, ^{
添加多线程的代码, 不需要添加自动释放池
});
返回主线程
dispatch_async(dispatch_get_main_queue(), ^{
});
例子2:创建一个并发GCDdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
添加多线程方法
});
返回主线程
dispatch_async(dispatch_get_main_quieue(), ^{
});