iOS 多线程

  • 1.进程和线程
    什么是进程?
进程当用户下达执行应用程序命令时,所启动的东西。

什么是线程?

线程是进程的执行单位,比喻线程是工厂里的工人,而进程比作是工厂

- 2. 多线程
 为了更好的进行一些程序的操作,节省时间,提高效率。
 一个进程不能过多的创建线程,资源消耗太大(工厂能有太多的工人,工资不可以发太多)开辟5个左右的线程就可以。

注意:所有的UI的操作,都放在主线程中进行,
需要开辟线程的耗时操作,包括图像文字渲染,大数据存储。网络请求等。

## iOS线程下  NSThread
1> currentThread 获取当前线程
 NSThread *thread = [NSThread currentThread];
打印结果:<NSThread: 0x7fad10603a40>{number = 1, name = main}
name代表线程名字
number 线程编号
main 代表主线程
2> 开辟个子线程
子线程随机创建
[NSThread detachNewThreadSelector:@selector(detachNewThread) toTarget:self withObject:nil];
打印线程随机创建
3> 延迟当前的线程执行,固定日期
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:10];
  [NSThread sleepUntilDate:date];
延迟10 s
 4> 相对时间
 [NSThread sleepForTimeInterval:1];
5> exit 退出当前线程, 不要退出主线程
退出后线程后续操作不会再执行,
[NSThread exit];
6> priority 线程的优先级
默认线程优先级都为0.5
 double priority = [NSThread threadPriority];
    NSLog(@"%lf", priority);
double 类型
7> isMainThread 判断是否是主线程
判断当前线程是不是主线程
[NSThread isMainThread];
判断线程对象是不是主线程
[[NSThread mainThread] isMainThread];
8>  初始化方法
初始化一个未启动的线程
需要手动管理线程
NSThread *newThread = [[NSThread alloc] initWithTarget:self selector:@selector(newThread1) object:nil];
    [newThread start];

注意:子线程加载完成后一定要返回主线程显示
返回主线程方法:performSelectorOnMainThread

*#pragma mark 加载图片-(void)loadImage{
//请求数据NSData data= [self requestData];
/
将数据显示到UI控件,注意只能在主线程中更新UI,另外performSelectorOnMainThread方法是NSObject的分类方法,每个NSObject对象都有此方法,它调用的selector方法是当前调用控件的方法,例如使用UIImageView调用的时候selector就是
UIImageView的方法Object:代表调用方法的参数,不过只能传递一个参数(如果有多个参数请使用对象进行封装)waitUntilDone:是否线程任务完成执行 */
[self performSelectorOnMainThread:@selector(updateImage:) withObject:data waitUntilDone:YES];
}

pragma mark 多线程下载图片-(void)loadImageWithMultiThread{

//方法1:使用对象方法//创建一个线程,第一个参数是请求的操作,第二个参数是操作方法的参数// NSThread *thread=[[NSThread alloc]initWithTarget:self selector:@selector(loadImage) object:nil];
启动一个线程,注意启动一个线程并非就一定立即执行,而是处于就绪状态,当系统调度时才真正执行
[thread start];
//方法2:使用类方法
[NSThread detachNewThreadSelector:@selector(loadImage) toTarget:self withObject:nil];
}

##GCD
1> GCD 全称是Grand central dispatch
2> GCD 核心概念队列, 管理任务拆分分配到队里中,系统会自动为我们创建线程和调度线程,自动。
3> GCD 中的队列严格遵循fifo(先进先出)法则
 对列分为
1>串行DISPATCH_QUEUE_SERIAL / NULL
2>并行DISPATCH_QUEUE_CONCURRENT
4> 队列的创建
串行
自己创建的队列
 dispatch_queue_t queue = dispatch_queue_create("queue", NULL);
并行
系统提供的队列
dispatch_queue_t queue2 =  dispatch_queue_create("queue1", DISPATCH_QUEUE_CONCURRENT)
主队列是串行
dispatch_queue_t queue3 = dispatch_get_main_queue();
全局队列
参数1. 调度队列优先级
参数2. 给未来使用,占位使用默认填0
dispatch_queue_t global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
术语:
串行,一个任务执行完成,在执行下个任务
并发,多个任务同时执行
同步 串行队列(不会创建线程)
同步 在当前线程做时,不能开辟线程
异步 在新创建的线程做事, 执行任务,可以开辟线程
同步串行队列 不会创建线程
串发 创建一条新的线程, 在改线程中执行任务
并发 根据任务决定需要创建多少线程
同步 并发(不会创建线程)
同步主线程(不会执行)
主线程等待同步操作结束,同步操作在主线程执行,互相等待 同步主线程,导致程序卡死
同步全局队列(不会创建线程)并发的;

希望可以帮助大家
讨论iOS技术、提些意见➕QQ : 251099939
在线解答
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339

推荐阅读更多精彩内容

  • 一、前言 上一篇文章iOS多线程浅汇-原理篇中整理了一些有关多线程的基本概念。本篇博文介绍的是iOS中常用的几个多...
    nuclear阅读 2,033评论 6 18
  • 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案...
    张战威ican阅读 598评论 0 0
  • 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案...
    伯恩的遗产阅读 274,282评论 251 2,331
  • 欢迎大家指出文章中需要改正或者需要补充的地方,我会及时更新,非常感谢。 一. 多线程基础 1. 进程 进程是指在系...
    xx_cc阅读 7,168评论 11 70
  • 初见你,你是讲台上睿智风趣的历史老师,而彼时的我,是反逆期的少女。喜欢历史,并不是因为培根说读史使人明智,而是初中...
    万俟伶仃阅读 219评论 0 0