ios开发之多线程-_第1页
ios开发之多线程-_第2页
ios开发之多线程-_第3页
ios开发之多线程-_第4页
ios开发之多线程-_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ios开发之多线程多线程的主要是用来执行一些耗时操作,例如网络图片、视频、歌曲、书籍等资源下载,游戏中的音乐播放等,充分发挥多核处理器的优势,并发(同时执行任务让系统运行的更快、更流畅。介绍下比较常用的多线程技术,主要有NSObject、NSThread、NSOperation、GCD 等。1、NSObject多线程技术1> 使用performSelectorInBackground可以开启后台线程,执行selector选择器选择的方法2> 使用performSelectorOnMainThread可以重新回到主线程执行任务,通常用于后台线程更新界面UI时使用3> NSThr

2、ead sleepForTimeInterval:1.0f; 让当前线程休眠,通常在程序开发中,用于模拟耗时操作,以便跟踪不同的并发执行情况!但是,在程序发布时,千万不要保留此方法!不要把测试中的代码交给客户,否则会造成不好的用户体验。提示:使用performSelectorInBackground也可以直接修改UI,但是强烈不建议使用。修改UI最好在主线程中执行注意:在使用NSThread或者NSObject的线程方法时,一定要使用自动释放池,否则容易出现内存泄露。- (voidviewDidLoadsuper viewDidLoad;/ 在后台线程执行方法self performSelec

3、torInBackground:selector(testObject withObject:nil;/ 打印当前线程numNSLog("main - %", NSThread currentThread;- (voidtestObject/ 自动释放池,避免出现内存泄露autoreleasepool / 让当前线程睡眠2.0 秒NSThread sleepForTimeInterval:2.0f;NSLog("Background - %", NSThread currentThread;2、NSThread多线程技术1> 类方法直接开启后台线程

4、,并执行选择器方法detachNewThreadSelector2> 成员方法,在实例化线程对象之后,需要使用start执行选择器方法initWithTarget对于NSThread的简单使用,可以用NSObject的performSelectorInBackground替代同时,在NSThread调用的方法中,同样要使用autoreleasepool进行内存管理,否则容易出现内存泄露。- (voidviewDidLoadsuper viewDidLoad;/ 开启新线程执行方法NSThread detachNewThreadSelector:selector(testObject to

5、Target:self withObject:nil;/ / 通过实例化一个线程来开启任务/ NSThread *thread = NSThread alloc initWithTarget:self selector:selector(testObject object:nil;/ thread start;/ 打印当前线程numNSLog("main - %", NSThread currentThread;- (voidtestObject/ 自动释放池,避免出现内存泄露autoreleasepool / 让当前线程睡眠2.0 秒NSThread sleepForTi

6、meInterval:2.0f;NSLog("Background - %", NSThread currentThread;3、NSOperation多线程技术1> 使用步骤:1实例化操作a NSInvocationOperationb NSBlockOperation2将操作添加到队列NSOperationQueue即可启动多线程执行2> 更新UI使用主线程队列NSOpeationQueue mainQueue addOperation ;3> 操作队列的setMaxConcurrentOperationCount可以设置同时并发的线程数量!提示:此功

7、能仅有NSOperation有!4> 使用addDependency可以设置任务的执行先后顺序,同时可以跨操作队列指定依赖关系提示:在指定依赖关系时,注意不要循环依赖,否则不工作。interface FLViewController (NSOperationQueue *_queue;endimplementation FLViewController- (voidviewDidLoadsuper viewDidLoad;/ 1. 初始化操作队列_queue = NSOperationQueue alloc init;/ 2. 创建线程操作/ NSInvocationOperation

8、*op = NSInvocationOperation alloc initWithTarget:self selector:selector(testObject object:nil;NSBlockOperation *op = NSBlockOperation blockOperationWithBlock:/ 让当前线程睡眠2.0 秒NSThread sleepForTimeInterval:2.0f;/ 打印当前线程NSLog("Background - %", NSThread currentThread;/ 3. 开启线程_queue addOperation

9、:op;4、GCD多线程技术-Grand Central DispatchGCD是基于C语言的框架,该多线程技术是苹果官方推荐使用的。1> 要使用GCD,所有的方法都是dispatch开头的2> 名词解释global 全局queue 队列async 异步sync 同步3> 要执行异步的任务,就在全局队列中执行即可dispatch_async 异步执行控制不住先后顺序4> 关于GCD的队列全局队列dispatch_get_global_queue参数:优先级 DISPATCH_QUEUE_PRIORITY_DEFAULT始终是 0串行队列dispatch_queue_cr

10、eate("myQueue", DISPATCH_QUEUE_SERIAL; 是创建得到的,不能直接获取主队列dispatch_get_main_queue5> 异步和同步与方法名无关,与运行所在的队列有关!提示:要熟悉队列于同步、异步的运行节奏,一定需要自己编写代码测试!规律:并发队列(global/concurrent,根据函数名判断是同步执行(dispatch_sync还是异步执行(dispatch_async串行队列(serial,无论后面的函数名是同步还是异步,均按照同步执行,并且,如果队列中第一个函数为同步,则该队列中所有的函数均在当前线程(一般为主线程执行同步主要用来控制方法被调用的顺序- (voidviewDidLoadsuper viewDidLoad;/ 创建一个全局队列,优先级为默认dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0;dispatch_async(queue, / 添加异步任务1-blockNSLog("-1- %", NSThread currentThread;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论