成都网站建设设计

将想法与焦点和您一起共享

iOS多线程开发之NSObject的多线程方法

  • NSObject的多线程方法

    创新互联拥有网站维护技术和项目管理团队,建立的售前、实施和售后服务体系,为客户提供定制化的成都做网站、网站制作、网站维护、成都机柜租用解决方案。为客户网站安全和日常运维提供整体管家式外包优质服务。我们的网站维护服务覆盖集团企业、上市公司、外企网站、商城建设、政府网站等各类型客户群体,为全球近千家企业提供全方位网站维护、服务器维护解决方案。

NSObject提供了一些多线程的方法,这些方法使用简单而且量级轻,但无法对线程进行必要的控制,所以并不推荐使用。

开启后台执行任务的方法

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg

在后台线程中通知主线程执行任务的方法

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait

     

  • 多线程中的资源竞争

并发编程中许多问题的根源就是在多线程中访问共享资源,资源可以是一个属性、一个对象、网络设备或者一个文件等

在多线程中共享的资源被称作临界资源,访问了临界资源的那一部分代码被称作临界区

有临界区出现,就可能是一个潜在的冲突点,需要程序员精心去设计防止潜在的冲突发生。

在多线程开发中,如果访问了临界资源(共享资源),由于线程运行切换的时机问题可能会导致得到的结果是错误的。

在争夺临界资源时,可以使用互斥锁将临界区锁住,方法是使用@synchronized。

    iOS多线程开发之NSObject的多线程方法

还有一种保护属性setter方法的原子操作是,在@property中制定atomic关键字,即在使用setter方法时,将其锁住。

在iOS开发中,不建议使用@synchronized和atomic(代价非常大),也就是说尽量不要去抢夺资源

正是出于性能的考虑,UIKit框架的绝大部分类都不是线程安全的,所以苹果才要求更新UI的操作一定要放到主线程去做

  • RunLoop机制

提供了一种异步执行代码的机制,不能并发执行任务

在主队列中,MainRunLoop直接配合任务的执行,负责处理UI事件、计数器、以及其他内核相关事件。

RunLoop的主要目的是保证线程不会被系统终止

工作特点:

     当有事件发生时,Run Loop会根据具体的事件类型通知应用程序做出响应

     当没有事件发生时,Run Loop会进入休眠状态,从而达到省电的目的

     当事件再次发生时,Run Loop会被重新唤醒,处理事件

iOS程序主线程设置了RunLoop,其他线程没有设置

    

iOS多线程开发之NSObject的多线程方法

iOS多线程开发之NSObject的多线程方法

     

   


网页标题:iOS多线程开发之NSObject的多线程方法
网站链接:http://chengdu.cdxwcx.cn/article/jpgdeo.html