基础篇---多线程

来源:互联网 发布:然足下卜之鬼乎翻译 编辑:程序博客网 时间:2024/06/06 08:33

区分线程, 进程!

进程: 一个正在运行的程序 

线程: 程序中独立运行的代码段

一个进程是由一个或多个线程组成的, 线程负责执行代码, 进程负责调度分配.

线程分为单线程, 多线程.

在以下三种情况下使用多线程:

1. 进行大量的运算的时候

2. 数据读取 (本地读取/数据库查询所有数据的时候)

3. 网络请求 (同步网络请求)

线程与线程之间是独立运行, 互不干扰的

多线程中不能对UI进行修改, 只能在主线程中修改

多线程方法中需要加自动释放池

多线程实现的种类: NSThread, NSObject, NSOperation(NSOperationQueue), NSBlockOperation, NSInvocationOperation, GCD多线程

1. NSThread是一种轻量级的多线程

初始化方法有两种:

- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;

+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;

2. NSObject是最简单的后台

- (void)performSelectorInBackground:@selector(SEL)selector withObject:(id)arg;

3. NSOperation和NSOperationQueue

NSOperationQueue线程队列,会自动调用start方法

@property NSInteger maxConcurrentOperationCount;

设置线程的数量, 让各路线程排队执行, 当数量为1的时候, 我们称线程与线程之间是同步的

- (void)addOperation:(NSOperation *)op;

4. NSBlockOperation

+ (instancetype)blockOperationWithBlock:(void (^)(void))block;

block中的内容就是多线程所要执行的代码

5. NSInvocationOperation

- (instancetype)initWithTarget:(id)target selector:(SEL)sel object:(id)arg;

6. GCD多线程(最常用的)

dispatch queue分为2种:

serailQueue: 实现线程同步, 一次执行一个任务

concurrent:并发执行多个任务, 遵循FIFO

(1) 创建一个同步线程队列(括号第一个参数是给线程起的名字, 第二个参数是表明线程是同步的

    eg: 

dispatch_queue_t queue = dispatch_queue_create("first", DISPATCH_QUEUE_SERIAL);

(2) 异步执行同步线程队列

dispatch_async(queue, ^{

});

想显示到界面上,所有的跟UI有关的内容全部要在主线程运行, 所以用下面的代码返回主线程,  这里面的代码都是在主线程中运行

dispatch_async(dispatch_get_main_queue(), ^{

         

        });





0 0