多线程技术在ios开发中的使用

多线程技术在ios开发中的使用

ID:35543438

大小:296.00 KB

页数:4页

时间:2019-03-26

多线程技术在ios开发中的使用_第1页
多线程技术在ios开发中的使用_第2页
多线程技术在ios开发中的使用_第3页
多线程技术在ios开发中的使用_第4页
资源描述:

《多线程技术在ios开发中的使用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、多线程技术在iOS开发中的使用进程和线程要使用多线程,首先需要理解进程和线程这2个概念。这里我简单的说一下。所谓进程对应的是一个应用程序,负责开辟内存空间供应用程序使用,但是进程不能执行任务(指令)。一个进程至少包含一条线程,线程是程序的执行流。•iOS程序启动时,在创建一个进程的同时,会开始运行一个线程,该线程被称为主线程•系统中的每一个进程都有自己独立的虚拟内存空间,而同一个进程中的多个线程则共用进程的内存空间•每创建一个新的线程,都会消耗一定内存和CPU时间•当多个线程对同一个资源出现争夺的

2、时候需要注意线程安全问题 多线程的应用及使用注意事项将耗时、轮询或者并发需求高等任务分配到其他线程执行,并由主线程负责统一更新界面会使得应用程序更加流畅,用户体验更好,例如网络请求,播放游戏的背景音乐等。•线程使用不是无节制的–iOS中的主线程的堆栈大小是1M–从第二个线程开始都是512KB–这些数值不能通过编译器开关或线程API函数更改注:更新UI界面,处理界面和用户之间的交互事件一定要在主线程中处理。 iOS中的多线程技术 1.NSObject的多线程方法-对NSThread的封装(一个NST

3、hread对象对应一条线程)•开启后台线程执行任务的方法-(void)performSelectorInBackground:(SEL)aSelectorwithObject:(id)arg•在后台线程中通知主线程执行任务的方法–(void)performSelectorOnMainThread:(SEL)aSelectorwithObject:(id)argwaitUntilDone:(BOOL)wait;•获取线程信息[NSThreadcurrentThread];•线程休眠      [NS

4、ThreadsleepForTimeInterval:1.0f];提示:–performSelectorInBackground方法本身是在主线程中执行的,而选择器指定的方法是在后台线程中进行的–尽管使用performSelectorInBackground方法调用的任务可以更新UI界面,但是在实际开发中,涉及到UI界面的更新操作,还是要使用performSelectorOnMainThread方法,以避免不必要的麻烦注:•内存管理对于多线程非常重要•Objective-C可以凭借@autorel

5、easepool使用内存资源,并需要时回收资源•每个线程都需要有@autoreleasepool,否则可能会出现内存泄漏 2.NSThread •创建线程方法:1.+(void)detachNewThreadSelector:(SEL)selectortoTarget:(id)targetwithObject:(id)argument;2.-(id)initWithTarget:(id)targetselector:(SEL)selectorobject:(id)argument;•参数说明:–s

6、elector:线程执行的方法,只能有一个参数,不能有返回值–target:selector消息发送的对象–argument:传输给target的唯一参数,也可以是nil 3.NSOperation/NSOperationQueue •NSOperation的两个子类1.NSInvocationOperation2.NSBlockOperation •工作原理:1.用NSOperation封装要执行的操作2.将创建好的NSOperation对象放NSOperationQueue中3.启动Opera

7、tionQueue开始新的线程执行队列中的操作•注意事项:1.使用多线程时通常需要控制线程的并发数,因为线程会消耗系统资源,同时运行的线程过多,系统会变慢2.使用以下方法可以控制并发的线程数量:-(void)setMaxConcurrentOperationCount:(NSInteger)cnt;3.使用addDependency可以建立操作之间的依赖关系,设定操作的执行顺序 上面的程序设置依赖关系后,只有等操作a和b都执行完,才会执行c. 4.GCD •GCD队列:1.全局队列:所有添加到主队

8、列中的任务都是并发执行的(可能会开启多条线程)dispatch_queue_tqueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);2.串行队列:所有添加到串行队列中的任务都是顺序执行的(只可能会开启一条线程)dispatch_queue_tqueue=dispatch_queue_create("myQueue",DISPATCH_QUEUE_SERIAL);3.主队列:所有添加到主队列中的任务都是在

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

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

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