标签:
1.
谈谈你对多线程开发的理解?iOS中有几种实现多线程的方法,并说明每种方式有什么特点?
答:使用多线程开发的好处:
1、使用线程可以把程序中占据时间长的任务放到后台去处理,如网络数据的请求、图片、视频的下载
2、发挥多个处理器的优势,并发执行让系统运行的更快、更流畅,用户体验更好
缺点:1、大量的线程降低代码的可读性
2、更多的线程需要更多的内存空间
3、当多个线程对同一个资源同时进行访问的时候,会出现资源争夺的情况,这个时候要注意线程的安全。
1、NSThread(两种创建方式)
优点:NSThread比其他两个轻量级,使用简单。
缺点:需要自己管理线程的生命周期、线程同步、加锁、睡眠以及唤醒等。线程同步对数据的加锁会有一定的系统开销。
脱离线程:
[NSThread detachNewThreadSelector:@selector(doSomething:) toTarget:self
withObject:nil];
非脱离线程:
NSThread *myThread = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething:) object:nil];
[myThread start];
2、NSOperationQueue
NSOperationQueue是面向对象的,不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。
NSOperationQueue *oprationQueue = [[NSOperationQueue alloc] init];
//这个block语句块在子线程中执行
}
3、Grand Central Dispatch (GCD)
GCD是基于C语言的,苹果开发的一个多核编程的解决方案,iOS4之后才能使用,GCD更接近底层,但是从异步操作之间的事务性、顺序性、依赖关系,GCD需要自己写更多的代码来实现,而NSOperation以及内建了这些支持。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 耗时的操作
dispatch_async(dispatch_get_main_queue(), ^{
// 更新界面
});
});
PS:不显示的创建线程的方法:
用NSObject的类方法
performSelectorInBackground:withObject: 创建一个线程:?[Obj performSelectorInBackground:@selector(doSomething) withObject:nil];
2.
线程与进程的区别和联系?
答:线程是进程的基本单位 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下 不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的 地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较 大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
3.
简述多线程的作用以及什么地方会用到多线程?OC实现多线程的方法有哪些?谈谈多线程安全问题的几种解 决方案?何为线程同步,如何实现的?分线程回调主线程方法是什么,有什么作用?
(1)、多线程的作用:可以解决负载均衡问题,充分利用cpu资源 。为了提高CPU的使用率,采用多线程的方式去同时完 成几件事情而互不干扰,
(2)、大多情况下,要用到多线程的主要是需要处理大量的IO操作时或处理的情况需要花大量的时间等等,比如:读写文 件、视频图像的采集、处理、显示、保存等。 (3)、ios有三种主要方法:1、NSThread。2、NSOperation。3、GCD。 (4)解决方案:使用锁:锁是线程编程同步工具的基础。锁可以让你很容易保护代码中一大块区域以便你可以确保代码的正 确性。使用POSIX互斥锁;使用NSLock类;使用@synchronized指令等。
(5)回到主线程的方法: dispatch_async(dispatch_get_main_queue(), ^{ });
作用:主线程是显示UI界面,子线程多数是进行数据处理
标签:
原文地址:http://www.cnblogs.com/jinchengvs/p/4836838.html