iOS开发之多线程了解
2016-05-26 11:02
260 查看
iOS系统中,据我所知,有三种开辟多线程的方法。
下面给大家说明一下这三种多线程的区别和特点:
其中需要注明一点,在升级到Xcode7之后,我们在viewDidLoad中,如果想要更新视图的UI界面,添加什么控件之类的,我们需要开辟一个线程,在线程中更新这个视图UI。
NSTread
其中NSThread贴近底层系统,所以应用并不广泛。
较为常用的GCD,因为GCD虽然抽象但是很简单,用起来很方便。
但是如果是复杂一点的程序,要求高一些的话,通常用NSOperation来做多线程。
因为NSOperation有两点是GCD替代不了的,1是NSOperation有最大并发数量,GCD没有,2是NSOperation可以取消当前子线程,而GCD不能,所以如果需要高度定制的话,用复杂的NSOperation。
GCD
GCD有两个开启子线程的对象,一个是dispatch_async异步执行 ,另一个是dispatch_sync同步执行。
如果创建多个子线程的时候,可能会遇到线程同步的问题,这个时候我们可以用NSLock锁定线程,让异步执行GCD对象一个一个去执行。
GCD还有组别功能,类似计数器,进一个加1,出一个减1,当组别减少到0得时候,调用notifi的方法。
GCD还有信号量,同时并发线程数量的通道,我们可以设置信号量的等待方式,谁用完就可以将信号量的位置放开
NSOperation
NSOperation分为两种对象,一个是NSInvocationOperation对象,一个是NSBlockOperation对象,
如果想要让对象工作,则必须要创建NSOperationQueue队列,并添加进去,同时设置队列的最大并发数量的属性
NSInvocationOperation对象可以调用相应方法,来实现子线程的操作
NSBlockOperation则是在自身的Block中实现子线程的操作
下面给大家说明一下这三种多线程的区别和特点:
其中需要注明一点,在升级到Xcode7之后,我们在viewDidLoad中,如果想要更新视图的UI界面,添加什么控件之类的,我们需要开辟一个线程,在线程中更新这个视图UI。
NSTread
其中NSThread贴近底层系统,所以应用并不广泛。
较为常用的GCD,因为GCD虽然抽象但是很简单,用起来很方便。
但是如果是复杂一点的程序,要求高一些的话,通常用NSOperation来做多线程。
因为NSOperation有两点是GCD替代不了的,1是NSOperation有最大并发数量,GCD没有,2是NSOperation可以取消当前子线程,而GCD不能,所以如果需要高度定制的话,用复杂的NSOperation。
GCD
GCD有两个开启子线程的对象,一个是dispatch_async异步执行 ,另一个是dispatch_sync同步执行。
如果创建多个子线程的时候,可能会遇到线程同步的问题,这个时候我们可以用NSLock锁定线程,让异步执行GCD对象一个一个去执行。
GCD还有组别功能,类似计数器,进一个加1,出一个减1,当组别减少到0得时候,调用notifi的方法。
GCD还有信号量,同时并发线程数量的通道,我们可以设置信号量的等待方式,谁用完就可以将信号量的位置放开
NSOperation
NSOperation分为两种对象,一个是NSInvocationOperation对象,一个是NSBlockOperation对象,
如果想要让对象工作,则必须要创建NSOperationQueue队列,并添加进去,同时设置队列的最大并发数量的属性
NSInvocationOperation对象可以调用相应方法,来实现子线程的操作
NSBlockOperation则是在自身的Block中实现子线程的操作
相关文章推荐
- sps pps AudioSpecificConfig
- iOS基础笔试题 - 集锦二
- iOS基础笔试题 - 集锦一
- IOS之本地推送
- iOS新特性之实现3D Touch
- IOS设计模式--单例设计模式
- iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?
- 《Motion Design for iOS》(二十二)
- ios唯一标示符
- 调试2
- 图片拉伸---resizableImageWithCapInsets
- iOS界面间传值的几种方式
- ios 使用ZBar读取条形码和二维码
- IOS开发中 常常遇到的遇到的警告,错误汇总,解决方法
- iOS开发技巧之LLDB打印支持frame或id类型
- IOS开发之----常用函数和常数
- iOS CoreAnimation 基础动画CABasicAnimation
- iOS: 0xe8008018-the-identity-used-to-sign-the-executable-is-no-longer-valid
- iOS学习之——__weak和__block
- iOS开发者如何写自己的用户行为统计(仿友盟统计)