多线程是一个比较轻量级的方法,来实现单个应用程序内多个代码段的执行.IOS多线程对许多人来说都是非常难以理解和掌握,以下是我对其的一点简单理解,希望能对大家有所帮助.
1.每个正在运行的程序都至少包含一个线程,也就是我们所说的主线程, 主线程在程序启动时创建,用来执行main函数,我们的大部分逻辑代码都存在主线程中.如果没有业务需要,我们不要再添加其他线程使程序的复杂度增加.而当我们所要执行的某段逻辑所需时间过长,导致界面卡死等状况,从而影响用户体验时,我们就需要引入其他线程来分离部分逻辑.
2.IOS主要有四种多线程编程技术,分别是:
(1)NSObject
(2)NSThread
(3)NSOperation和NSOperationQueue
(4)GCD
2.1 NSObject使用
NSObject存在一个最简单的后台执行的方法.代码如下:
- (id)performSelector:(SEL)aSelector withObject:(id)object;
当我们调用该方法时就可以在后台执行某个方法从而解决线程阻塞问题.这个用法相对简单,就不做过多赘述.
2.2 NSThread使用
NSThread是一个轻量级的多线程,它由两种创建方法.
- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;
+ (void)detachNewThreadSelector:(SEL)aselector toTarget:(id)aTarget withObject:(id)anArgument;
第一种是实例方法,当我们用该方法初始化一个线程时,还需要调用start()方法来手动启动. 第二个是类方法,当初始化一个线程时会自动启动.
2.3 NSOperation和NSOperationQueue使用
我们一般不直接使用NSOperation,当我们需要使用时,一种方式是自定义一个类继承于NSOperation,在我们定义的类中重写main()方法.另外一种方式是使用系统定义好的两个子类NSInvocationOperation或者NSBlockOperation.然后把NSOperation添加到NSOperationQueue队列中,该队列就会自动启动进行处理.
NSOperationQueue是操作队列,它用来管理一组Operation对象的执行,其中Operation对象可以调节它在队列中的优先级.当最大并发数设置为1的时候,可以实现线程同步.
2.4 GCD的使用
main queue: 运行在主线程,由dispatch_get_main_queue获得.和UI相关的操作都要在主线程内.
serial queue: 没次只运行一个任务,可以添加多个.
concurrent queue: 可以同时运行多个任务,使用dispatch_get_global_queue.
GCD的功能很强大,运用起来也相对简单,所以会逐步取代其他的几种方式,也是我们现在最常用的方式.
以上就是我对多线程编程的一些理解,希望能对大家有所帮助.