多线程

作者: Hardy_Hu | 来源:发表于2017-02-09 16:51 被阅读0次

在Object-C中主要有NSThread, GCD, NSOperation三种方式来实现多线程编程。

NSThread

NSThread 是个比较古老的API了,使用者需要自己管理线程的生命周期、同步、加锁等问题, 比较灵活,但初学者也容易管理不好,而造成不必要的坑。

创建和启动线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(registe) object:nil];
// 需要手动启动线程
[thread start];
// detach 时创建线程后就会自己开始
[NSThread detachNewThreadSelector:@selector(login) toTarget:self withObject:nil];

NSThread是需要自己管理线程的生命周期的,主要操作有开启、睡眠、取消、退出,以及设置线程的优先级, 操作比较灵活,容易出错
请参考:
http://www.open-open.com/lib/view/open1452993005808.html 写的很详细易懂。

NSOperation

NSOperation是基于GCD来实现的,以面向对象的方式封装了需要执行的一些操作,不必关心线程管理、同步等问题。但是NSOperation只是一个抽象基类,需要使用NSInvocationOperation和NSBlockOperation来开启多线程,或者自定义NSOperation.

创建和启动线程
NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(registe) object:nil];
// 默认是同步方式执行
[op start];
// 取消线程
[op cancel];
// 监听线程执行完毕,如果在NSOperation执行完毕后做一些事情,可以调用CompletionBlock方法
op.completionBlock = ^(){
NSLog(@"线程执行完毕");
};
请参考:
http://blog.csdn.net/q199109106q/article/details/8565923

GCD

GCD是对C语言封装提供的一套基于task任务的API, GCD对于代码的处理是基于Task的,一个task一般是一个Block或者一个Function。利用GCD实现多线程编程,不需要关心生命周期等问题。使用GCD只需要想清楚任务的执行方法(同步还是异步)和队列的运行方式(串行还是并行)。

dispatch_queue_t 申明一个dispatch_queue_t对象
@property (nonatomic, strong) dispatch_queue_t queue;
可以使用dispatch_retain()和dispatch_release()对其进行内存管理。
创建一个队列:
dispatch_queue_t queue = dispatch_queue_create("http://www.jianshu.com",DISPATCH_QUEUE_SERIAL)
开启线程:
dispatch_sync(queue, ^{
// 代码
});
获取主线程:
dispatch_get_main_queue()```

请参考:http://blog.csdn.net/cloudybird/article/details/50751617,写的很不错。

https://github.com/hardy88/My-Study

参考:
http://blog.csdn.net/cloudybird/article/details/50751617
http://www.open-open.com/lib/view/open1452993005808.html

相关文章

  • iOS多线程 NSOperation

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程 pthread、NSThread

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程: GCD

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程运用

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程基础

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • 多线程介绍

    一、进程与线程 进程介绍 线程介绍 线程的串行 二、多线程 多线程介绍 多线程原理 多线程的优缺点 多线程优点: ...

  • iOS进阶之多线程管理(GCD、RunLoop、pthread、

    深入理解RunLoopiOS多线程--彻底学会多线程之『GCD』iOS多线程--彻底学会多线程之『pthread、...

  • iOS多线程相关面试题

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • 多线程之--NSOperation

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • iOS多线程之--NSThread

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

网友评论

      本文标题:多线程

      本文链接:https://www.haomeiwen.com/subject/xvwiittx.html