iOS 之多线程

来源:互联网 发布:流程图制作软件中文 编辑:程序博客网 时间:2024/05/22 13:28

 说到多线程,首先得了解几个专业名词.

1. 程序:由源代码生成的可执行应用.(例如: QQ.app)

2. 进程:一个正在运行的程序就可以看做一个进程, 进程拥有独立运行所需的全部资源.

3.程序中独立运行的代码段.

一个进程是由一个或多个线程组成. 进程只负责资源的调度和分配; 线程负责代码的执行, 是程序真正的执行单元.

每个正在运行的程序, 至少包含一个线程, 这个线程叫主线程, 主线程在程序启动时创建, 用于执行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:创建一个并发GCD

     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

     添加多线程方法

});

     返回主线程

     dispatch_async(dispatch_get_main_quieue(), ^{

});


0 0