关于IOS多线程三种方式的那点儿事
1.NSThread
NSThread是IOS提供的可以开辟一个线程的类,是完全面向对象的,可以直接操控线程对象和方法,非常直观和方便。
[NSThread isMainThread]可以返回一个Bool值。用于检测当前线程是主线程还是分线程。1是主线程;0是分线程。
[NSThread detachNewThreadSelector: toTarget: withObjct: ]这个方法是开辟一个分线程,第三个参数是你想要往这个方法里面传的值。
NSThread这种方法创建的线程需要管理线程的生命周期、同步、加锁问题,会导致一定的性能开销。不过可以用[NSThread currentThread]跟踪任务所在线程,在调试的时候十分方便。
2.NSOperation和NSOperationQueue
它是苹果公司对GCD的封装,是面向对象的线程技术。只需将任务放到对应的队列中,不必关心线程管理、同步等问题。
NSOperationQueue是个操作队列,可以开辟一个分线程,也称线程池。通过alloc创建出来的操作队列相当于开辟了一个分线程;[NSOperationQueue mainQueue]获取主队列,这时把操作对象放进主队列里,他们都会在主线程里执行任务。[queue addOperation: ]
NSOperation是操作队列要放置的操作对象。他是一个虚类,不能直接使用,只能用它的子类:NSInvocationOperation、NSBlockOperation。
需要注意的是更新刷新UI一定要在主线程里执行。
3.GCD(Grand Central Dispach)
GCD用来解决多核编程问题,IOS4之后提出的,是基于C语言的底层API。
GCD是苹果为多核编程的并行运算提出的解决方案,所以会自动合理的利用更多的CPU内核。
GCD会自动管理线程的生命周期,创建线程、调度任务、销毁线程。
GCD使用block来定义任务,使用起来非常灵活。
通过GCD可以创建串行、并发、主队列,可以同步和异步执行任务。
****************自己IOS学习的知识点总结,有不足之处,还请多多包涵***********