IOS 多线程 有三种主要方法
(1)NSThread
(2)NSOperation
(3)GCD

下面简单介绍这三个方法

1.NSThread

调用方法如下:

如函数需要输入参数,可从object传进去。
(1) [NSThread detachNewThreadSelector:@selector(threadInMainMethod:) toTarget:self withObject:nil];
(2) NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadInMainMethod:) object:nil];
[myThread start]; 
(3) [obj performSelectorInBackground:@selector(threadMe) withObject:nil];

提个问题:如果某个ViewController里运行了一个Thread,Thread还没结束的时候,这个ViewController被Release了,结果会如何?

经过的的测试,Thread不结束,ViewController一直保留,不会执行dealloc方法。

2.NSOperation  

NSoperation也是多线程的一种,NSopertaion有2种形式
  (1) 并发执行
并发执行你需要重载如下4个方法
//执行任务主函数,线程运行的入口函数
- (void)start 
//是否允许并发,返回YES,允许并发,返回NO不允许。默认返回NO
-(BOOL)isConcurrent 
- (BOOL)isExecuting
//是否已经完成,这个必须要重载,不然放在放在NSOperationQueue里的NSOpertaion不能正常释放。
- (BOOL)isFinished
比如TestNSOperation:NSoperaion 重载上述的4个方法,
声明一个NSOperationQueue, NSOperationQueue *queue = [[[NSOperationQueue alloc ] init] autorelease];
[queue addOperation:testNSoperation];

它会自动调用TestNSOperation里的 start函数,如果需要多个NSOperation,你需要设置queue的一些属性,如果多个NSOperation之间又依赖关系,也可以设置,具体可以参考API 文档。

(2)非并发执行
-(void)main
只需要重载这个main方法就可以了。  

  3.GCD

GCD很强大,我的使用经验很少。但是scorpiozj 总结的比较全面(http://www.cnblogs.com/scorpiozj/archive/2011/07/25/2116459.html)

同时,这篇文章也介绍的比较详细 http://www.cnblogs.com/vinceoniphone/archive/2011/04/07/2007968.html

官方教程

GCD是和block紧密相连的,所以最好先了解下block(可以查看这里).GCD是C level的函数,这意味着它也提供了C的函数指针作为参数,方便了C程序员.

下面首先来看GCD的使用:

dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

async表明异步运行,block代表的是你要做的事情,queue则是你把任务交给谁来处理了.(除了async,还有sync,delay,本文以async为例).

之所以程序中会用到多线程是因为程序往往会需要读取数据,然后更新UI.为了良好的用户体验,读取数据的操作会倾向于在后台运行,这样以避免阻塞主线程.GCD里就有三种queue来处理.

1. Main queue:

  顾名思义,运行在主线程,由dispatch_get_main_queue获得.和ui相关的就要使用Main Queue.

2.Serial quque(private dispatch queue)

  每次运行一个任务,可以添加多个,执行次序FIFO. 通常是指程序员生成的,比如:

NSDate *da = [NSDate date];NSString *daStr = [da description];const char *queueName = [daStr UTF8String];dispatch_queue_t myQueue = dispatch_queue_create(queueName, NULL);

3. Concurrent queue(global dispatch queue):

可以同时运行多个任务,每个任务的启动时间是按照加入queue的顺序,结束的顺序依赖各自的任务.使用dispatch_get_global_queue获得.

所以我们可以大致了解使用GCD的框架:

dispatch_async(getDataQueue,^{//获取数据,获得一组后,刷新UI.    dispatch_aysnc (mainQueue, ^{//UI的更新需在主线程中进行};})

由此可见,GCD的使用非常简单,以我的使用经验来看,以后会逐步淘汰使用NSOperation而改用GCD.

转载于:https://www.cnblogs.com/chu888chu888/archive/2011/11/21/2256711.html

IOS 多线程的一些总结相关推荐

  1. iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(上)

    2017-07-08 remember17 Cocoa开发者社区 目的 本文主要是分享iOS多线程的相关内容,为了更系统的讲解,将分为以下7个方面来展开描述. 多线程的基本概念 线程的状态与生命周期 ...

  2. iOS 多线程的四种技术方案

    iOS 多线程的四种技术方案 image pthread 实现多线程操作 代码实现: void * run(void *param) {for (NSInteger i = 0; i < 100 ...

  3. iOS多线程开发之GCD(基础篇)

    总纲: GCD基本概念 GCD如何实现 GCD如何使用 队列和任务组合 一.GCD基本概念 GCD 全称Grand Central Dispatch(大中枢队列调度),是一套低层API,提供了⼀种新的 ...

  4. iOS多线程:『NSOperation、NSOperationQueue』详尽总结

    2019独角兽企业重金招聘Python工程师标准>>> iOS多线程:『NSOperation.NSOperationQueue』详尽总结 转载: 原地址https://www.ji ...

  5. iOS多线程拾贝------操作巨人编程

    iOS多线程拾贝------操作巨人编程 多线程 基本 实现方案:pthread - NSThread - GCD - NSOperation Pthread 多平台,可移植 c语言,要程序员管理生命 ...

  6. ios多线程开发的常用三种方式

    ios多线程开发的常用三种方式 1.NSThread 2.NSOperationQueue 3.GCD NSThread: 创建方式主要有两种: [NSThread detachNewThreadSe ...

  7. iOS 多线程:『GCD』详尽总结

    原文链接:www.jianshu.com/p/2d57c7201- 感谢大家对这篇文章的喜欢和支持.为了不辜负大家的喜欢,也为了更好的让大家了解 iOS 多线程,以及 GCD 的相关知识,我对这篇文章 ...

  8. IOS 多线程04-GCD详解 底层并发 API

    IOS 多线程04-GCD详解 底层并发 API 注:本人是翻译过来,并且加上本人的一点见解. 前言 想要揭示出表面之下深层次的一些可利用的方面.这些底层的 API 提供了大量的灵活性,随之而来的是大 ...

  9. 多线程 循环 锁_大多数人还不清楚的iOS多线程

    你不知道的的 iOS 多线程 程序员用有限的生命去追求无限的知识. 有言在先 首先我不是故意要做标题党的,也不是我要炒冷饭,我只是想换个姿势看多线程,本文大部分内容在分析如何造死锁,奈何功力尚浅,然而 ...

最新文章

  1. java 封装 继承 堕胎_JAVA封装、继承、多态
  2. E-UTRA channel bandwidths per operating band (36.101)
  3. 一秒钟世界上会发生多少事_1秒钟世界上会发生多少事?答案超乎你的想象……...
  4. php ftp 创建文件夹失败,PHP使用FTP函数创建目录
  5. Asp.Net WebForm生命周期的详解
  6. 统计学习方法笔记(李航)———第五章(决策树)
  7. 【impala】impala的shell命令使用
  8. 降序php,以降序php读取文件
  9. 【Java与智能设备】Ch0402 Activity的生命周期
  10. 使用预计算实时全局光照优化照明-优化实时光照贴图
  11. APP开通支付宝支付 转账功能
  12. 【云周刊】第121期:图管够!灌篮高手、女儿国…阿里日,这帮程序员太会玩了!...
  13. Ubuntu下通过命令打开图片
  14. 华三服务器启用cpu虚拟化,启动BIOS的虚拟化设置方法|开启CPU虚拟化支持
  15. 亚马逊后台付款表(Custom Transaction)详解
  16. 实现游戏的读档和存档
  17. 图形驱动程序和显卡驱动什么区别_电脑游戏显卡和专业图形显卡存在的区别
  18. 67 step to success
  19. 华擎主板的网络唤醒设置。
  20. 22岁对于人生的感悟

热门文章

  1. 第一章 OSI参考模型
  2. Bayesian Neural Network for regression (PRML)
  3. 核心业务系统的内容讨论(管理篇)(转载)
  4. Android异步加载
  5. js判断页面是首次加载还是刷新
  6. 创建Vue实例传入的options||Vue的生命周期
  7. MyBatis的入门知识
  8. Python 技术篇-用smtplib和email库实现邮件发送并展示本地图片实例演示
  9. Python 技术篇-使用pygame库实现音乐播放实例演示,带漂亮小界面!
  10. jquery/css实现步骤条