`
yidongkaifa
  • 浏览: 4071179 次
文章分类
社区版块
存档分类
最新评论

ios多线程的一些总结

 
阅读更多
IOS 多线程 有三种主要方法
(1)NSThread
(2)NSOperation
(3)GCD

下面简单介绍这三个方法

1.NSThread

调用方法如下:

如函数需要输入参数,可从object传进去。
(1) [NSThread detachNewThreadSelector:@selector(threadInMainMethod:) toTarget:self withObject:nil];

(2) NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadInMainMethod:) object:nil];
[myThread start];
(3) [obj performSelectorInBackground:@selector(threadMe) withObject:nil];

提个问题:如果某个ViewController里运行了一个Thread,Thread还没结束的时候,这个ViewController被Release了,结果会如何?

经过的的测试,Thread不结束,ViewController一直保留,不会执行dealloc方法。

2.NSOperation

NSoperation也是多线程的一种,NSopertaion有2种形式
(1) 并发执行
并发执行你需要重载如下4个方法
//执行任务主函数,线程运行的入口函数
- (void)start
//是否允许并发,返回YES,允许并发,返回NO不允许。默认返回NO
-(BOOL)isConcurrent
- (BOOL)isExecuting
//是否已经完成,这个必须要重载,不然放在放在NSOperationQueue里的NSOpertaion不能正常释放。
- (BOOL)isFinished
比如TestNSOperation:NSoperaion 重载上述的4个方法,
声明一个NSOperationQueue, NSOperationQueue *queue = [[[NSOperationQueue alloc ] init] autorelease];
[queue addOperation:testNSoperation];

它会自动调用TestNSOperation里的 start函数,如果需要多个NSOperation,你需要设置queue的一些属性,如果多个NSOperation之间又依赖关系,也可以设置,具体可以参考API 文档。

(2)非并发执行
-(void)main
只需要重载这个main方法就可以了。

3.GCD

GCD很强大,我的使用经验很少。但是scorpiozj 总结的比较全面(http://www.cnblogs.com/scorpiozj/archive/2011/07/25/2116459.html)

同时,这篇文章也介绍的比较详细http://www.cnblogs.com/vinceoniphone/archive/2011/04/07/2007968.html

官方教程

GCD是和block紧密相连的,所以最好先了解下block(可以查看这里).GCD是C level的函数,这意味着它也提供了C的函数指针作为参数,方便了C程序员.

下面首先来看GCD的使用:

dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

async表明异步运行,block代表的是你要做的事情,queue则是你把任务交给谁来处理了.(除了async,还有sync,delay,本文以async为例).

之所以程序中会用到多线程是因为程序往往会需要读取数据,然后更新UI.为了良好的用户体验,读取数据的操作会倾向于在后台运行,这样以避免阻塞主线程.GCD里就有三种queue来处理.

1. Main queue:

  顾名思义,运行在主线程,由dispatch_get_main_queue获得.和ui相关的就要使用Main Queue.

2.Serial quque(private dispatch queue)

  每次运行一个任务,可以添加多个,执行次序FIFO. 通常是指程序员生成的,比如:

NSDate *da = [NSDate date];
NSString
*daStr = [da description];
const char *queueName = [daStr UTF8String];
dispatch_queue_t myQueue
= dispatch_queue_create(queueName, NULL);

3.Concurrent queue(global dispatch queue):

可以同时运行多个任务,每个任务的启动时间是按照加入queue的顺序,结束的顺序依赖各自的任务.使用dispatch_get_global_queue获得.

所以我们可以大致了解使用GCD的框架:

dispatch_async(getDataQueue,^{
//获取数据,获得一组后,刷新UI.
dispatch_aysnc (mainQueue, ^{
//UI的更新需在主线程中进行
};
}
)

由此可见,GCD的使用非常简单,以我的使用经验来看,以后会逐步淘汰使用NSOperation而改用GCD.

分享到:
评论

相关推荐

    iOS 多线程总结

    对iOS的多线程方式做的总结;Pthreads,NSThread,GCD,NSOperation/NSOperationQueue

    ios多线程编程指南

    本篇文档包含了以下章节和附录:  “关于多线程编程”介绍了多线程的概念和它们在应用设计里面的角色。... “线程安全总结” 提供了 Mac OS X 和 iOS 上面固有的线程安全的高度总结 和它们的主要框架

    iOS多线程简单介绍

    iOS中常见的多线程技术的简单总结,比较适合新手参考。

    iOS中多线程的经典崩溃总结大全

    主要给大家介绍了关于iOS中多线程的一些经典崩溃的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

    iOS 开发 之 多线程总结

    非常好的ios开发之多线程的资料 自愿下载原则

    iOS 多线程总结之GCD的使用详解

    本篇文章主要介绍了iOS 多线程总结之GCD的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    iOS-多线程之GCD

    在说GCD之前,先说几个核心的概念任务:...任务串行执行2、异步+串行队列打印结果:总结:开启了一条线程,任务串行执行3、同步+并发队列打印结果:总结:不开启新线程,主线程执行任务,任务也是顺序执行4、异步+并

    iOS各类面试题总结.zip

    含字节跳动,美团,腾讯百度等大厂面试题,iOS基础,算法,多线程,Runloop,GCD,动画,数据结构,性能,UI等等20多套PDF,物超所值,升职加薪就靠它了!!!

    微信读书 iOS 性能优化总结 | WeRead团队博客1

    1. 业务性能监控,是指在App本地,业务的开始和结束处打点上报,然 2. 卡顿监控 1.优化业务流程 2.合理的线程分配 2.多线程情况下,络回调的时 3.预

    iOS开发中多线程的安全隐患总结

    在本篇文章中小编给大家整理了关于iOS开发中多线程的安全隐患的知识点,需要的朋友们学习参考下。

    ios问答题-这份文档总结了100个iOS开发/设计面试中可能会问到的问题,涵盖了非常全面的内容.md

    针对iOS系统的一些核心技术和新特性,如Handoff、iCloud、iOS扩展、HealthKit、HomeKit、Apple Pay、应用沙盒、辅助功能、多任务处理、游戏中心、iBeacons等,考察面试者对这些技术的理解程度。 3. 编程相关 围绕...

    iOS自己用的几个demo

    包括各种传值方法,json xml的解析方法 ,各种网络异步多线程请求,文件io 数据库操作,UITableView的使用总结

    java版飞机大战源码-awesome-iOS:真棒-iOS

    GCD、NSOperationQueue、NSRunLoop、多线程安全、锁 RAC/MVVM Runtime iOS Animation、UIBezierPath、CAShapeLayer Swift CocoaPods LLDB 调试打包日志测试持续集成 证书推送上架 版本管理 Blog iOS代码库 XCode插件...

    iOS面试题PPT合集OC实用版本

    OC基础语法面试 Runtime面试 RunLoop面试 多线程面试 内存管理面试 性能优化面试 设计模式与架构面试 面试总结

    GoldHouse-for-iOS:iOS APM

    多线程 -(来源:京东零售技术) 本地持久化 非原子和原子 - - App卡顿检测 -(来源:MrPeak杂货铺) -(来源:微信移动) App性能检测 -(来源:美团) 总结-(来源:WeRead团队博客) -(来源:戴铭) -(来

    GCD 总结-队列和任务的理解

    GCD 是苹果开发的应对多核编程,本实例总结了 GCD 三种队列的获取和创建,以及两种执行任务的方法。

Global site tag (gtag.js) - Google Analytics