NSThread、NSOperation

2017-11-24  本文已影响5人  6灰太狼9

首先我们先搞清两个概念:进程线程
进程:进程是指在系统中正在运行的一个应用程序(同时开启qq和xcode,系统就会启动两个进程)。每个进程之间都是互相独立的,每个进程均运行在其专用的且受保护的内存空间内。

线程:一个进程要想执行任务,必须有线程(每个进程至少有一条线程,即主线程)。线程是进程的基本执行单位,进程的执行任务都在线程中执行。 线程是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

线程中任务的执行是串行的,如果要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务。也就是说,在同一时间内,1个线程只能执行1个任务。

而我们在使用中不可能让多个任务在一个线程中依次去执行,因而就引入了多线程。
多线程:在一个进程中开启多个线程,每条线程可以并发(同时)执行不同的任务。
多线程的原理:同一时间,CPU只能处理一条线程,只有一条线程在工作(执行)。多线程并发(同时)执行,其实是CPU快速的在多条线程之间调度(切换),如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象

多线程优点:
(1)能适当提高程序的执行效率
(2)能适当提高资源利用率(CPU,内存利用率)
多线程缺点:
(1)开启线程需哟啊占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能
(2)线程越多,CPU在调度线程上的开销就越大
(3)程序设计更加复杂:比如线程之间的通信,多线程的数据共享

NSThread

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];   //创建线程 在启动
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];//创建线程后直接启动
[self performSelectorInBackground:@selector(run) withObject:nil];//隐式创建了线程  并启动
线程的主要方法
// 获得主线程
+ (NSThread *)mainThread;    

// 判断是否为主线程(对象方法)
- (BOOL)isMainThread;

// 判断是否为主线程(类方法)
+ (BOOL)isMainThread;    

// 获得当前线程
NSThread *current = [NSThread currentThread];

// 线程的名字——setter方法
- (void)setName:(NSString *)n;    

// 线程的名字——getter方法
- (NSString *)name;

//线程启动  
- (void)start;

//阻塞线程   这是类方法,在那个线程中调用,就阻塞那个线程
+ (void)sleepUntilDate:(NSDate *)date;
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;

//结束线程   这是类方法,在那个线程中调用,就结束那个线程
+ (void)exit;

NSOperation

https://www.jianshu.com/p/4b1d77054b35

上一篇 下一篇

猜你喜欢

热点阅读