ios学习记录 day41 UI17 多线程

时间:2014-04-29 20:04:57   收藏:0   阅读:657

CPU(工厂) 进程(车间) 线程(工人)

一个进程代表一个应用程序 CPU总是运行一个进程,其它进程处于非运行状态.一个进程可以包含多个线程.线程与线程之间可以共享进程的内存区域.

打开一个应用程序,系统会给我们创建一个线程,称为主线程 管理主界面的UI与内部循环机制(与界面相关的东西必须放在主线程中!!!) 压力比较大且会造成线程阻塞(界面卡),因此我们通过创建子线程来对主线程进行分压.

 

什么时候用多线程

1.网络请求(同步的) 2.文件读写(少) 3.大数据计算(冒泡) 4.数据库select

 

ios中多线程编程

在多线程的方法需要添加自动释放池!!!  在应用程序打开的时候系统自动为主线程创建一个自动释放池,自己创建的子线程需要自己手动添加

NSThread;NSOperationQueue;NSOperation;NSObject;
GCD;(常用)

1.

NSThread轻量级 俩个方法- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument   (需要手动开始 用start)

                          + (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument    (自动开始)

                          start(开始) cancel(结束)

2.

NSOperation(网络异步请求 用的最多 ios一般开10条线程)  是基类,在主线程中

NSOperationQueue(线程队列 一般同时请求超过10条 所以用队列)  init在主线程中main在子线程中

 

线程队列一般配合单例使用

3.

NSObject 异步后台执行

[self performSelectorInBackground:@selector(aButtonAction) withObject:nil];

4.

GCD(Grand Central Dispatch) 苹果开发的技术,以优化应用程序支持多核心处理器和其他的对称多处理系统的系统,是建立在任务并行执行的线程池模式的基础上的,不用autorelease   是IOS4.0之后可用

GCD让程序平行排队执行任务  一个任务可以是一个函数或者是一个block,GCD的底层依然是用线程实现   GCD中得FIFO队列dispatch queue 保证先进先出

dispatch queue分为以下三种:

serial(同步执行):private dispatch queue最多同时运行1个子线程            每个队列中是同步执行的  同步队列与同步队列之间是并发的

concurrent(并发):global dispatch queue最多同时运行count个子线程      可以并发的执行多个任务,但是执行完成的顺序是随机的

main dispatch queue():在主线程上执行任务

 

 

如何返回主线程

方法只有两个:

1.GCD  dispatch_get_main_queue()

2.NSObject   - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;//除了GCD都用这个

 

 

线程互斥

两个人同时访问一个资源 (尽量不要在方法中对成员变量和属性操作)解决办法 加锁解锁 递归和循环容易造成死锁

 

ios学习记录 day41 UI17 多线程,码迷,mamicode.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!