ios开发学习之ios多线程和runloop

ios开发学习之ios多线程和runloop

ID:34416900

大小:58.31 KB

页数:9页

时间:2019-03-05

ios开发学习之ios多线程和runloop_第1页
ios开发学习之ios多线程和runloop_第2页
ios开发学习之ios多线程和runloop_第3页
ios开发学习之ios多线程和runloop_第4页
ios开发学习之ios多线程和runloop_第5页
资源描述:

《ios开发学习之ios多线程和runloop》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、iOS开发学习之iOS多线程和RunLoopiOS多线程编程对于iOS开发初学者来说,总是会觉得很难理解和掌握,现在通过几个实例来更加系统全面的理解iOS多线程编程,希望对大家有所帮助。一.线程概述二.创建线程1.使用NSThread2.使用NSObject3.POSIXThread三.多线程进阶1.NSOperation&NSOperationQueue2.GCD四.进程间通信1.和主线程的通信2.任意线程间的通信五.RunLoop一.线程概述有些程序是一条直线,起点到终点;有些程序是一个圆,不断循环,直到将它切断。直线的如

2、简单的HelloWorld,运行打印完,它的生命周期便结束了,像昙花一现那样;圆如操作系统,一直运行直到你关机。 一个运行着的程序就是一个进程或者叫做一个任务,一个进程至少包含一个线程,线程就是程序的执行流。Mac和iOS中的程序启动,创建好一个进程的同时,一个线程便开始运行,这个线程叫主线程。主线程在程序中的地位和其他线程不同,它是其他线程最终的父线程,且所有界面的显示操作即AppKit或UIKit的操作必须在主线程进行。 系统中的每一个进程都有自己独立的虚拟内存空间,而同一个进程中的多个线程则共用进程的内存空间。每创建一个

3、新的线程,都需要一些内存(如每个线程有自己的Stack空间)和消耗一定的CPU时间。另外当多个线程对同一个资源出现争夺的时候需要注意线程安全问题。二.创建线程创建一个新的线程就是给进程增加了一个执行流,执行流总得有要执行的代码吧,所以新建一个线程需要提供一个函数或者方法作为线程的入口。1.使用NSThreadNSThread提供了创建线程的途径,还可以提供了检测当前线程是否是主线程的方法。使用NSThread创建一个新的线程有两种方式:1.创建一个NSThread的对象,调用其start方法。对于这种方式的NSThread对象

4、的创建,可以使用一个目标对象的方法初始化一个NSThread对象,或者创建一个继承NSThread类的子类,实现其main方法,然后在直接创建这个子类的对象。2.使用detachNewThreadSelector:toTarget:withObject:这个类方法创建一个线程,这个比较直接了,直接使用目标对象的方法作为线程启动入口。2.使用NSObject其实NSObject直接就加入了多线程的支持,允许对象的某个方法在后台运行。如:[myObjperformSelectorInBackground:@selector(doS

5、omething)withObject:nil];复制代码3.POSIXThread由于Mac和iOS都是基于Darwin系统,Darwin系统的XUN内核,是基于Mach和BSD的,继承了BSD的POSIX接口,所以可以直接使用POSIX线程的相关接口来使用线程。创建线程的接口为pthread_create,当然在创建之前可以通过相关函数设置好线程的属性。以下为POSIX线程使用简单的例子。////  main.c//  pthread////  CreatedbyLuKejinon1/27/12.//  Copyright

6、(c)2012Taobao.com.Allrightsreserved.//#include#include#includevoid*pthreadRoutine(void*);intmain(intargc,constchar*argv[]){pthread_attr_tattr;pthread_tpthreadID;intreturnVal;returnVal=pthread_attr_init(&attr);returnVal=pthread_attr_setd

7、etachstate(&attr,PTHREAD_CREATE_DETACHED);intthreadError=pthread_create(&pthreadID,&attr,&pthreadRoutine,NULL);returnVal=pthread_attr_destroy(&attr);if(threadError!=0){//Reportanerror.}sleep(10);return0;}void*pthreadRoutine(void*data){intcount=0;while(1){printf("cou

8、nt=%d",count++);sleep(1);}returnNULL;}复制代码三.多线程进阶NSOperation&NSOperationQueue很多时候我们使用多线程,需要控制线程的并发数,毕竟线程也是消耗系统资源的,当程序中同时运行的线程过多时,系统必然变慢。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。