iOS中面试题之----多线程

1.多线程的底层实现

(1)首先回答什么是线程

1个进程要想执行任务,必须得有线程.线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行

(2)什么是多线程

1个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务。

多线程的作用:更新显示UI界面、处理用户触摸事件。

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

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

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

2》OC的NSThread

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

4》  OC的NSOperation和NSOperationQueue(基于GCD)

2.线程的通信

(1)GCD:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// 下载图片

UIImage *image = nil;

dispatch_async(dispatch_get_main_queue(), ^{

// 回到主线程

});

(2)NSThread的线程通信

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// 下载图片

UIImage *image = nil;

[self performSelector:@selector(settingImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:YES modes:nil];

}

这种情况 也适用于子线程之间的通信。

(3)NSThread的线程通信

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// 下载图片

UIImage *image = nil;

[self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:YES];

}

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

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

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

1》开发中实现多线程的方案

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

2》OC的NSThread

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

4》  OC的NSOperation和NSOperationQueue(基于GCD)

2》多线程安全的解决方案

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

2》如果要防止资源抢夺,得用synchronize进行加锁保护。

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

5.GCD内部怎么实现的

1》 iOS和OSX的核心是XNU内核(苹果电脑发展的操作系统内核),GCD是基于XNU内核实现的。

2》GCD的API全部在libdispatch库中

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

Dispatch Queue :管理block操作

Dispatch Source:处理事件(比如说线程间的通信)

6.GCD和NSOperationQueue

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

2》GCD只支持FIFO的队列,NSOperationQueue可以很方便的调整执行顺序,可以添加依赖设置最大并发数量。

3》GCD的执行速度比NSOperationQueue快

4》NSOperationQueue支持KVO,可以检测Operation是否正在执行,是否结束,是否取消。

如何进行选择?

任务之间不太相互依赖,选用GCD;

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

时间: 2024-10-21 23:07:01

iOS中面试题之----多线程的相关文章

ios中的几种多线程实现

iOS 支持多个层次的多线程编程,层次越高的抽象程度越高,使用起来也越方便,也是苹果最推荐使用的方法.下面根据抽象层次从低到高依次列出iOS所支持的多线程编程范式:1, Thread;2, Cocoa operations;3, Grand Central Dispatch (GCD) (iOS4 才开始支持)下面简要说明这三种不同范式:Thread 是这三种范式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步.线程共享同一应用程序的部分内存空间,它

转 ios中的几种多线程实现 .

iOS 支持多个层次的多线程编程,层次越高的抽象程度越高,使用起来也越方便,也是苹果最推荐使用的方法.下面根据抽象层次从低到高依次列出iOS所支持的多线程编程范式:1, Thread;2, Cocoa operations;3, Grand Central Dispatch (GCD) (iOS4 才开始支持) 下面简要说明这三种不同范式:Thread 是这三种范式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步.线程共享同一应用程序的部分内存空间,

iOS中通过GCD实现多线程用法

GCD简介 GCD全称Grand Central Dispatch,可翻译为“牛逼的中枢调度器”. 纯C语言,提供了非常多强大的函数. GCD优势: GCD是苹果公司为多核的并行运算提出的解决方案. GCD会自动利用更多的CPU内核(比如双核.四核). GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程). 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码. 任务和队列 GCD中有2个核心概念 任务:执行什么操作. 队列:用来存放任务. GCD的使用就2个步骤 定制任

iOS中 GCD-Grand Central Dispath 多线程 UI_21

GCD:Grand Central Dispath "牛逼的中枢调度器";是纯C语言编写的,提供了很多比较强大的函数 GCD:优势 1.目前是苹果主推的线程管理方式 2.它会自动的利用更多的CPU资源(双核,四核) 3.它会自动的管理线程的生命周期(线程的创建/调度/销毁); 4.程序员只需要告诉GCD自己想要执行的哪些任务,不需要写一行线程管理的代码 #import "ViewController.h" #define kURLString1 @"htt

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

本文转载至 http://blog.csdn.net/xunyn/article/details/14525243 ios面试题多核并发应用 iOS面试题系列: iOS如何面试 iOS面试题(一) iOS基础面试题(二) iOS基础面试题(三) iOS基础面试题(四) iOS进阶面试题----Block部分 1 多线程是什么 多线程是个复杂的概念,按字面意思是同步完成多项任务,提高了资源的使用效率,从硬件.操作系统.应用软件不同的角度去看,多线程被赋予不同的内涵,对于硬件,现在市面上多数的CPU

iOS进阶面试题----多线程 蓝懿教育

1 多线程是什么 多线程是个复杂的概念,按字面意思是同步完成多项任务,提高了资源的使用效率,从硬件.操作系统.应用软件不同的角度去看,多线程被赋予不同的内涵,对于硬件,现在市面上多数的CPU都是多核的,多核的CPU运算多线程更为出色:从操作系统角度,是多任务,现在用的主流操作系统都是多任务的,可以一边听歌.一边写博客:对于应用来说,多线程可以让应用有更快的回应,可以在网络下载时,同时响应用户的触摸操作.在iOS应用中,对多线程最初的理解,就是并发,它的含义是原来先做烧水,再摘菜,再炒菜的工作,会

IOS面试题之--多线程

1 多线程是什么 多线程是个复杂的概念,按字面意思是同步完成多项任务,提高了资源的使用效率,从硬件.操作系统.应用软件不同的角度去看,多线程被赋予不同的内涵,对于硬件,现在市面上多数的CPU都是多核的,多核的CPU运算多线程更为出色:从操作系统角度,是多任务,现在用的主流操作系统都是多任务的,可以一边听歌.一边写博客:对于应用来说,多线程可以让应用有更快的回应,可以在网络下载时,同时响应用户的触摸操作.在iOS应用中,对多线程最初的理解,就是并发,它的含义是原来先做烧水,再摘菜,再炒菜的工作,会

iOS 面试题之多线程是什么?

面试官:你给我讲讲多线程吧. 我:多线程,就是多线程呗... 要是都这么回答,还有多少人要你. ===================================================== 首先分析多线程的使用环境: 多线程处理包括Core Data的多线程访问,UI的并行绘制,异步网络请求以及一些在运行态内存吃紧的情况下处理大文件的方案等. 其次,分别举例说明iOS提供的多线程的实现方法 iOS中提供了以下集中中多线程的实现方式 1.NSOBjcet实现 // 最简单的多线程 执

IOS中的多线程【二】— NSOperation和NSOperationQueue

NSOperationQueue是一套基于Objective-c语言的API. GCD与NSOperationQueue的优缺点: NSOperationQueue:比较安全 GCD:没有NSOperationQueue安全,但使用起来简单,快速,还提供了一些操控底层的方法.实际开发中还是以GCD为主. NSOperationQueue实现多线程流程 1.定义一个任务队列. 2.定义一个任务. 3.把任务添加到队列中.一旦任务被添加到队列中,任务会马上被调度执行. 任务队列(NSOperatio