码迷,mamicode.com
首页 > 编程语言 > 详细

MJ - 0915 - 多线程1

时间:2014-10-02 15:42:53      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:http   io   os   使用   ar   文件   数据   sp   art   

MJ代码级别

 

 

进程:

》系统正在运行的一个应用程序

》独立的,互不干扰

 

线程

》每个进程至少有一个线程

》串行,顺序执行

》线程是进程的一条执行路径

 

多线程

》1个进程可以开启多条线程,每条线程可以并行执行不同的任务

》提高程序执行效率

》原理:多线程是假象,CPU只能同时执行1个线程,CPU快速在多条线程切换

》IOS开发建议3条左右,最多5条

》问题:线程太多浪费资源,反而降低效率,影响性能

》多线程程序复杂,线程之间的通信,

 

多线程IOS应用

》ios程序启动默认开启1条线程,即主线程或UI线程,有且只有1条

》子线程:从主线程中创建的线程分支

》主线程:显示/刷新UI界面,处理UI事件

》主线程不应执行比较耗时的操作,比如下载文件、加载图片、数据存储

 

判断代码在哪个线程执行

 

NSLog(@"%@", [NSThread currentThread]);

// 主线程

NSLog(@"%@", [NSThread mainThread]);

// 判断主线程

if([NSThread isMainThread])

 

 

IOS实现多线程的四种方案

pthread C 手动管理 不用
NSThread OC 手动管理 少用
GCD C 自动管理 常用
NSOperation OC,基于GCD 自动管理 常用

 

》线程状态

bubuko.com,布布扣

 

 

》1 pthread(C语言):不用,需要手动管理

bubuko.com,布布扣

》2 NSThread(OC语言)少用,手动管理

 

bubuko.com,布布扣

创建分支线程并自动启动

bubuko.com,布布扣

 

隐式启动线程并执行

 

bubuko.com,布布扣

 

睡眠阻塞

bubuko.com,布布扣

 

中断线程,中断之后线程被销毁,不能重新start

[NSThread exit]

 

多线程安全隐患,数据错乱

》使用同步锁解决问题,@synchronized(self)传入的对象可以是任何唯一对象,一般使用self

》优点:防止多线程抢夺同一资源

   缺点:耗内存和CPU,影响性能

》线程同步:让多条线程在同一条线上执行,相对于线程并发,使用synchronized解决

bubuko.com,布布扣

 

》atomic和nonatomic,atomic为属性的setter方法加锁,但比较耗内存,不建议使用

bubuko.com,布布扣

》加载完数据后回到主线程更新UI,waitUntilDone表示是否在执行完当前代码后再继续执行下面的代码

bubuko.com,布布扣

 

 

》3 GCD(C语言)常用,自动管理

  Grand Central Dispatch,牛X的中枢调控器

  多核运行优化解决方案

  取消线程概念(自动管理线程)

  C语言函数库

  两个概念:任务、队列

 

》同步dispatch_sync,在当前线程中执行,不开启其它线程

异步dispatch_async,开启新线程执行

 

bubuko.com,布布扣

bubuko.com,布布扣

 

》异步并发队列(最常用),一般同时开多条线程

bubuko.com,布布扣

 

》异步串行队列(手动创建),一般只开一条线程

bubuko.com,布布扣

bubuko.com,布布扣

 

》异步主队列,不开新线程

bubuko.com,布布扣

 

 

》同步并发(逻辑错误,不用)

同步说明不开新线程,所以没有并发

 

》同步串行(不用)

同步就是串行执行

 

》同步主队列(不能用)

循环等待,无法正常执行

 

 

 

》4 NSOperation(OC语言,基于GCD)常用,自动管理

-->>MJ - 0916 - 多线程2<<--

 

 

》Foundation和Core Foundation框架的数据类型可以相互转换

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

 

 

 

小知识点                            


1. UIButton使用system模式不能设置image

 

2. 属性名不能以new、init开头,会被编译器识别为构造方法

 

3. 只有以initWith开头的类方法才能使用self

 

4. 使用xib是注意手势识别器,手势识别器也作为一个对象存在,所以使用lastObject方法获取控件时会出错

 

5. xib查找规则

xib名称不能和控制器除Controller外的部分一样

 

6. 直接在项目中修改xib的名称,建议clean一下项目

MJ - 0915 - 多线程1

标签:http   io   os   使用   ar   文件   数据   sp   art   

原文地址:http://www.cnblogs.com/jqtech/p/4004069.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!