4种多线程
来源:互联网 发布:linux按文件大小排序 编辑:程序博客网 时间:2024/05/13 01:49
1. NSThread
1>类方法 detachNewThreadSelector
直接启动线程,调用选择器方法
2>成员方法 initWithTarget
需要使用start方法,才能启动实例化出来的线程
优点:简单
缺点:
*控制线程的生命周期比较困难
*控制并发线程数
*存在死锁隐患
*先后顺序困难
例如:下载图片(后台线程) ->滤镜美化(后台线程) ->更新UI(主线程)
2. NSOperation
1> NSInvocationOperation
2> NSBlockOperation
定义完Operation之后,将操作添加到NSOperationQueue即可启动线程,执行任务
使用:
1> setMaxConcurrentOperationCount可以控制同时并发的线程数量
2> addDependency可以指定线程之间的依赖关系,
从而达到控制线程执行顺序的目的,如先下载,再渲染图片
提示:
要更新UI,需要使用[NSOperationQueuemainQueue]addOperationWithBlock:
在主操作队列中更新界面
3. GCD
1)全局global队列,如果是同步,则不开线程,在主队列中执行
方法:dispatch_get_global_queue(获取全局队列)
优先级:DISPATCH_QUEUE_PRIORITY_DEFAULT
所有任务是并发(异步)执行的
2)串行队列 必须开一条新线程,全是顺序执行的
方法:dispatch_queue_create(创建串行队列,串行队列不能够获取)
提示:队列名称可以随意,不过不要使用@
3)主队列
主线程队列
方法:dispatch_get_main_queue(获取主队列)
在gcd中,同步还是异步取决于任务执行所在的队列,更方法名没有关系
具体同步、异步与三个队列之间的关系,一定要反复测试,体会!
4.全局队列(可能会开启多条线程,如果是同步方法,则不开线程,只在主线程里)
dispatch_queue_t queue =dispatch_get_global_queue(
DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
串行队列(只可能会开启一条线程)
dispatch_queue_t queue =dispatch_queue_create("myQueue",
DISPATCH_QUEUE_SERIAL);
主队列
dispatch_get_main_queue();
异步操作
dispatch_async异步方法无法确定任务的执行顺序
同步操作
dispatch_sync同步方法会依次执行,能够决定任务的执行顺序
同步操作与队列无关,所有的队列的同步,都是顺序执行的
更新界面UI时,最好使用同步方法
GCD的优点:
充分利用多核
所有的多线程代码集中在一起,便于维护
GCD中无需使用@autoreleasepool
如果要顺序执行,可以使用dispatch_sync同步方法
dispatch_async无法确定任务的执行顺序
调用主线程队列任务更新UI时,最好使用同步方法
单例:
保证在内存中永远只有类的单个实例
建立方法:
1,声明一个静态成员变量,记录唯一实例
2,重写allocWithZone方法
allocWithZone方法是对象分配内存空间时,最终会调用的方法,
重写该方法,保证只会分配一个内存空间
3,建立sharedXXX类方法,便于其他类访问
- 多线程:4种定时器
- 多线程:4种定时器
- 4种多线程
- 多线程的使用(4) - iOS多线程的三种方式
- 多线程的使用(4) - iOS多线程的三种方式
- 多线程的使用(4) - iOS多线程的三种方式
- 实现多线程4种方法
- 多线程(4):
- 多线程-4
- 多线程4
- 多线程-4
- 多线程(4):
- 多线程同步的4种机制
- java获取多线程的4种方法
- 创建多线程的4种方式
- 多线程编程(4):多线程与UI操作
- 多线程编程(4):多线程与UI操作
- 多线程编程(4):多线程与UI操作 .
- 字符串常量到底存放在哪个存储区
- Libgdx 游戏开发 心水分享
- ArcGIS教程:多面体
- poj3126 Prime Path
- vim 多窗口编辑命令
- 4种多线程
- 游戏自动喝药
- ORACLE SQL分析函数总结
- 一点一点学ASP.NET之基础概念——HttpModule
- ImageLoad图片加载器
- MKMapView center on user location
- LeetCode: Single Numbers
- MySQL数据库跨服务器同步数据
- 查看OCX的属性和方法的脚本