IOS开发之多线程笔记

1.同步任务在串行队列基本没用,在并行队列和串行队列中都会在主线程中执行
2.串行队列中的异步任务只再开一个子线程。并且按照队列顺序执行
3.并行队列中的异步任务根据任务的个数开线程,而且是无序的。并行队列就是并发执行同步和异步任务。并发队列不能控制执行顺序和新建线程的数量
4.并行队列里嵌套同步任务是可以执行的,都执行在主先线程上,串行队列里嵌套同步任务直接死锁
5.队列是先进先出的(FIFO)。同步任务没有开线程的能力。
6.在IOS开发中,所有UI的更新操作都必须在主线程中执行
7.主线程(main_queue)里的异步任务,是运行在主线程上,而且是保持队形的.在主线程中的同步任务会造成阻塞
8.进程负责程序运行的内存分配,线程是进程中一个独立的执行路径,创建线程的目的就是为了开启一条新的执行路径。主线程在栈区中只有1M,子线程在栈区512k,主线程不可以停止休眠,子线程可以,但不能杀死
9.并发:指两个或者多个任务在同一时间间隔内生,但是在任意一个时刻点上,cpu只会处理一个任务
10.多线程技术是为了并发执行多项任务,不会提高单个算法本身的效率
11.队列负责调度任务执行所在的线程以及具体的执行时间
12.NSOperationQueue的主队列运行在主线程上,自定义队列在后台执行队列处理的任务是NSOperation的子类:1,NSInvocationOperation2,NSBlockOperation
13.Run Loop(运行循环)当有事件发生时,Run Loop会根据具体的事件类型通知应用程序做出响应,当没有事件发生时,Run Loop会进入休眠状态,从而达到省点的目的。IOS程序的主线程默认已经配置好了Run Loop,其他线程默认情况下没有设置Run Loop,在开发中通常会把事件添加到RunLoop中,而不会去主动创建RunLoop
14.block里多线程的循环引用问题:只有主线程有一个运行循环(Run Loop),子线程在代码运行完就销毁,block的管理以及线程的创建和销毁是由队列负责的,在block中使用self没有关系。只有self强引用block才会出现循环引用,不使用多线程。
15.在@property定义时nonatomic改为atomic就是原子锁,只保护setter方法。,而争抢共享资源时,如果涉及到属性的getter方法,可以使用互斥锁@synchronized可以保证属性在多个线程之间的读写都是安全的。但是无论时atomic还是@synchronized,使用的代价都是高昂的。多线程是并发执行多个任务提高效率的,如果可能,应该在线程中避免争抢共享资源。出于性能的考虑,UIKit中的绝大多数类都不是线程安全的,所以苹果公司要求:更新UI的相关操作,应该在主线程中执行

IOS开发之多线程笔记,布布扣,bubuko.com

IOS开发之多线程笔记

上一篇:SDK Platform Android 无法更新?


下一篇:Android四大组件--Broadcast Receiver详解