- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
IOS多线程
IOS多线程分析 柳行刚 IOS支持的三种线程范式 1, Thread; 2, Cocoa operations; 3, Grand Central Dispatch (GCD) (iOS4 才开始支持) Thread Thread 是这三种范式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步。线程共享同一应用程序的部分内存空间, 它们拥有对数据相同的访问权限。你得协调多个线程对同一数据的访问,一般做法是在访问之前加锁,这会导致一定的性能开销。 三种形式的IOS 1、Cocoa threads: 使用NSThread 或直接从 NSObject 的类方 2、performSelectorInBackground:withObject: 来创建一个线程。 3、POSIX threads: 基于 C 语言的一个多线程库 如果你选择thread来实现多线程,那么 NSThread 就是官方推荐优先选用的方式。 Cocoa operations Cocoa operations是基于 Obective-C实现的,类 NSOperation 以面向对象的方式封装了用户需要执行的操作,我们只要聚焦于我们需要做的事情,而不必太操心线程的管理,同步等事情,因为NSOperation已经为我 们封装了这些事情。 NSOperation 是一个抽象基类,我们必须使用它的子类。iOS 提供了两种默认实现:NSInvocationOperation 和 NSBlockOperation。 Grand Central Dispatch (GCD): Grand Central Dispatch (GCD): iOS4 才开始支持,它提供了一些新的特性,以及运行库来支持多核并行编程,它的关注点更高:如何在多个 cpu 上提升效率。 NSThread线程创建 NSThread的创建主要有两种直接方式: [NSTredad etachNewThreadSelector:@selector(myThreadMainMethod :)toTarget:self withObject:nil]; 和 NSThread*my Thread=[[NS Thread alloc] initWith Targets elf selector:@selector(myThreadMainMethod object:nil]; [my Thread start]; NSThread线程创建两种方式的区别 这两种方式的区别是:前一种一调用就会立即创建一个线程来做事情;而后一种虽然你 alloc 了也 init了,但是要直到我们手动调用 start 启动线程时才会真正去创建线程。这种延迟实现思想在很多跟资源相关的地方都有用到。后一种方式我们还可以在启动线程之前,对线程进行配置,比如设置 stack 大小,线程优先级。 NSThread线程创建的一种间接方式 还有一种间接的方式,更加方便,我们甚至不需要显式 编写NSThread相关代码。那就是利用NSObject的类方法 performSelectorInBackground:with Object:来创建一个线程 [myObj performSelectorInBackground:@selector(my ThreadMainMethod)withObject:nil]; 其效果与 NSThread的detachNewThreadSelector:toTarget withObject:是一样的。 线程同步 线程的同步方法跟其他系统下类似,我们可以用原子操作 ,可以用mutex,lock等。iOS的原子操作函数是以OSAtomic 开头的,比如:OSAtomicAdd32, OSAtomicOr32等等。这 些函数可以直接使用,因为它们是原子操作。iOS中的mutex 对就的是NSLock,它遵循NSLooking协议,我们可以使用lo ck,tryLock,lockBeforeData:来加锁,用unLock来解锁。 线程同步示例 BOOL moreToDo = YES; NSLock *theLock = [[NSLock alloc] init]; ... while (moreToDo) { /* Do another increment of calculation */ /* until there’s no more to do. */ if ([theLock tryLock]) {
文档评论(0)