iOS多线程之NSThread、NSOperationQueue、NSObject和GCD的区别
2016-05-21 17:01
609 查看
区别:
Thread:是这几种方式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步。线程共享同一应用程序的部分内存空间, 它们拥有对数据相同的访问权限。你得协调多个线程对同一数据的访问,一般做法是在访问之前加锁,这会导致一定的性能开销。在 iOS 中我们可以使用多种形式的 thread。
Cocoa threads(NSObject):
使用 NSThread 或直接从 NSObject 的类方法 performSelectorInBackground:withObject: 来创建一个线程。如果你选择thread来实现多线程,那么 NSThread 就是官方推荐优先选用的方式。
NSOperationQueue:
Cocoa operations是基于 Obective-C实现的,类 NSOperation 以面向对象的方式封装了用户需要执行的操作,我们只要聚焦于我们需要做的事情,而不必太操心线程的管理,同步等事情,因为NSOperation已经为我 们封装了这些事情。 NSOperation 是一个抽象基类,我们必须使用它的子类。iOS 提供了两种默认实现:NSInvocationOperation 和 NSBlockOperation。但当单独使用NSOperation的子类去创建线程的时候,线程没有被真正的创建,需要借助 NSOperationQueue类,当子线程被添加到NSOperationQueue类的对象中时,线程才真正创建成功,这个时候不要让子线程去调用 start方法,否组程序会crush
Grand Central Dispatch (GCD):
iOS4 开始支持,纯C语言封装,提供了很多非常强大的函数。GCD是苹果公司为多核的并行运算提出的解决方案,会自动利用更多的CPU内核(比如双核、四核), 会自动管理线程的生命周期(创建线程、调度任务、销毁线程),程序员只需告诉GCD想执行什么任务,不需要编写任何线程管理代码。
相关文章推荐
- Volley(2)—JsonObjectRequest和ImageRequest
- spring的 object is not an instance of declaring class
- 不管在不在arc下,object对象都有强引用、弱引用之分
- Xcode:duplicate declaration of method 'XXX'
- 重写Object类中的equals方法
- Programming with Objective-C(七)
- Objective-C Coding Style Guidelines
- scala学习13之与trait同名的object对象
- objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects
- SpringMVC数据格式转换报错:rejected value [065966] error in object 'command' on field 'imgNumber'
- ObjectInputStream序列化反序列化
- for(Object obj : objs) 解释
- console打印数组object具体内容
- iOS 杂笔-24(常用类到NSObject的继承列表)
- java for(Object obj:col)
- Object-C之KVC与KVO
- JavaWeb项目使用BlazeDS整合Flex进行RemoteObject数据交互
- JAXB - Annotations, The Object Factory: XmlRegistry, XmlElementDecl
- Jtest 对象库的使用(Object Repository)
- stirng转json,String转成List<Map<String,object>>,然后转成json