ios多线程

转载 2015年07月06日 22:18:27

1. 多线程的底层实现?

1> 首先搞清楚什么是线程、什么是多线程

2> Mach是第一个以多线程方式处理任务的系统,因此多线程的底层实现机制是基于Mach的线程

3> 开发中很少用Mach级的线程,因为Mach级的线程没有提供多线程的基本特征,线程之间是独立的

4> 开发中实现多线程的方案

l  C语言的POSIX接口:#include <pthread.h>

l  OC的NSThread

l  C语言的GCD接口(性能最好,代码更精简)

l  OC的NSOperation和NSOperationQueue(基于GCD)

 

2.线程间怎么通信?

1> performSelector:onThread:withObject:waitUntilDone:

2> NSMachPort

 

3.网络图片处理问题中怎么解决一个相同的网络地址重复请求的问题?

利用字典(图片地址为key,下载操作为value)

 

4.用NSOpertionNSOpertionQueue处理A,B,C三个线程,要求执行完A,B后才能执行C,怎么做?

// 创建队列

NSOperationQueue *queue =[[NSOperationQueue alloc] init];

 

// 创建3个操作

NSOperation *a = [NSBlockOperationblockOperationWithBlock:^{

NSLog(@”operation1---“);

}];

NSOperation *b = [NSBlockOperationblockOperationWithBlock:^{

NSLog(@”operation1---“);

}];

NSOperation *c = [NSBlockOperation blockOperationWithBlock:^{

NSLog(@”operation1---“);

}];

 

// 添加依赖

[c addDependency:a];

[c addDependency:b];

 

// 执行操作

[queue addOperation:a];

[queue addOperation:b];

[queue addOperation:c];

 

 

5.列举cocoa中常见对几种多线程的实现,并谈谈多线程安全的几种解决办法及多线程安全怎么控制?

1> 只在主线程刷新访问UI

2> 如果要防止资源抢夺,得用synchronized进行加锁保护

3> 如果异步操作要保证线程安全等问题, 尽量使用GCD(有些函数默认就是安全的)

 

6GCD内部怎么实现的

1> iOS和OS X的核心是XNU内核,GCD是基于XNU内核实现的

2> GCD的API全部在libdispatch库中

3> GCD的底层实现主要有Dispatch Queue和Dispatch Source

l  Dispatch Queue :管理block(操作)

l  Dispatch Source :处理事件

 

7.你用过NSOperationQueue么?如果用过或者了解的话,你为什么要使用NSOperationQueue,实现了什么?请描述它和GCD的区别和类似的地方(提示:可以从两者的实现机制和适用范围来描述)。

1> GCD是纯C语言的API,NSOperationQueue是基于GCD的OC版本封装

2> GCD只支持FIFO的队列,NSOperationQueue可以很方便地调整执行顺序、设置最大并发数量

3> NSOperationQueue可以在轻松在Operation间设置依赖关系,而GCD需要写很多的代码才能实现

4> NSOperationQueue支持KVO,可以监测operation是否正在执行(isExecuted)、是否结束(isFinished),是否取消(isCanceld)

5> GCD的执行速度比NSOperationQueue快

 

任务之间不太互相依赖:GCD

任务之间有依赖\或者要监听任务的执行情况:NSOperationQueue

 

8. 既然提到GCD,那么问一下在使用GCD以及block时要注意些什么?它们两是一回事儿么?blockARC中和传统的MRC中的行为和用法有没有什么区别,需要注意些什么?

Block的使用注意:

1>  block的内存管理

2>  防止循环retian

l  非ARC(MRC):__block

l  ARC:__weak\__unsafe_unretained

 

9.在异步线程中下载很多图片,如果失败了,该如何处理?请结合RunLoop来谈谈解决方案.(提示:在异步线程中启动一个RunLoop重新发送网络请求,下载图片)

1> 重新下载图片

2> 下载完毕, 利用RunLoop的输入源回到主线程刷新UIImageVIUew

 

10. Socket的实现原理及Socket之间是如何通信的

 

11.http协议的实现

iOS的三种多线程技术 对比分析

1.iOS的三种多线程技术                     1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发...
  • fhbystudy
  • fhbystudy
  • 2014年04月10日 17:07
  • 10581

iOS开发多线程在实际项目中的运用

在实际项目开发中为了能够给用户更好的体验,有些延时操作我们都会放在子线程中进行。 今天我们就来聊聊多线程在实际项目中的运用。...
  • qq_24904667
  • qq_24904667
  • 2016年09月27日 11:52
  • 2511

iOS进阶面试题----多线程

1 多线程是什么  多线程是个复杂的概念,按字面意思是同步完成多项任务,提高了资源的使用效率,从硬件、操作系统、应用软件不同的角度去看,多线程被赋予不同的内涵,对于硬件,现在市面上多数的CPU都是多核...
  • xunyn
  • xunyn
  • 2013年11月08日 17:49
  • 56218

iOS学习笔记——多线程(简单售票系统)

进程是系统资源管理的最小单位。线程是程序执行的最小单位。多线程是一个进程里包含多个线程。一个进程数据会加载到一个内存区间中,其中的线程共享相同的内存空间。各个进程的地址是独立的,只有进程能刷新UI、更...
  • u012889435
  • u012889435
  • 2014年01月02日 08:47
  • 1376

iOS中的多线程一般使用场景

在IOS开发中为提高程序的运行效率会将比较耗时的操作放在子线程中执行,iOS系统进程默认启动一个主线程,用来响应用户的手势操作以及UI刷新,因此主线程又叫做UI线程。 前面的Blog说明了NSThr...
  • jiandanjinxin
  • jiandanjinxin
  • 2016年01月21日 16:08
  • 3017

iOS 网络和多线程面试题01~[有答案]

//联系人:石虎  QQ: 1224614774 昵称:嗡嘛呢叭咪哄 一.选择题(前三题是多选 ,后面为单选题) 1.  以下对堆和栈的描述正确的是( 多选ABD ) A.栈区[stack]由编...
  • shihuboke
  • shihuboke
  • 2017年06月17日 20:50
  • 337

ios sqlite3多线程操作

记录下单例的宏使用,是为了简化及统一,使用,参考前一篇文章或是去网上找相关的代码。 部分代码参考自互联网,主要是加了pthread_mutex_t, 保证线程安全, 在openDb, closeDb...
  • nxjbill
  • nxjbill
  • 2017年09月02日 16:18
  • 262

iOS多线程比较、总结

NSThread、NSOperation、GCD 总结: 无论使用哪种方法进行多线程开发,每个线程启动后并不一定立即执行相应的操作,具体什么时候由系统调度(CPU 空闲时就会执行) 更新 UI ...
  • smnisbear
  • smnisbear
  • 2016年03月20日 15:20
  • 587

OA01-一个Demo展示iOS多线程技术的基本应用场景

最近在看iOS关于GCD、NSOperation多线程编程技术编程指南的时候写了个 小Demo,以7个小场景基本涵盖多线程技术的主流用法:其实多线程技术早在大学 读书的时候,基本思路就已经清晰了,不同...
  • lihuiqwertyuiop
  • lihuiqwertyuiop
  • 2015年01月12日 19:26
  • 1871

iOS——多线程编程详细解析

基本定义: 程序:由代码生成的可执行应用。(例如QQ.app) 进程:一个正在运行的程序可以看做是一个进程。 (例如:正在运行的QQ 就是一个进程),进程拥有独立运行所需要的全部资源。 线程: ...
  • ci915194561
  • ci915194561
  • 2015年10月05日 22:24
  • 722
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ios多线程
举报原因:
原因补充:

(最多只允许输入30个字)