程序:由源代码生成的可执行应用.

进程:一个正在运行的程序,进程拥有独立运行所需的全部资源;

         由一个或多个线程组成;

         进程只负责资源的调度和分配,线程才是程序的真正执行单元,负责代码的执行

线程:程序中独立运行的代码段.(单线程/多线程)

        只有并行

每个进程,至少包含一个线程,这个线程被称为主线程

主线程在同一时间只能干一件事,主线程尽量只用于展示(iOS中关于UI的添加和刷新必须在主线程中操作)

只有一个主线程的程序,称为单线程程序.

拥有多个线程的程序,称作多线程程序


[NSThread currentThread]获取当前的线程

[NSThread mainThread]获取主线程

[NSThread isMainThread]判断当前线程是否为主线程

****开辟子线程的三种方法

//NSObject开辟子线程

[self performSelectorInBackground: @selector(sayHi)withObject:@"aaa"];

//NSThread手动开辟子线程

NSThread *thread = [[NSThreadalloc]initWithTarget: self selector:@selector(sayHi) object:nil];

//让线程开始执行

[thread start];

//取消线程不会真正的取消掉线程,而是标记这个被取消了

[thread cancel];

//NSThread自动的去开辟一个子线程(子线程不能进行增删改的操作)

//使用NSThread自动的开辟一个线程

//不需要手动的开启线程

[NSThread detachNewThreadSelector:@selector(sayHi)toTarget:self withObject:nil];

//NSObject中回到主线程去做某些事情

[self performSelectorOnMainThread:@selector(onMainThread)withObject:nil waitUntilDone:YES];


创建NSOperation的方法有两个

//第一个

//通过NSInvocationOperation类来创建一个NSOperation对象(使用初始化方法)

NSInvocationOperation*operation = [[NSInvocationOperation alloc]initWithTarget:selfselector:@selector(hehehe)object:nil];

//第二个

//使用NSBlockOperation类来创建一个NSOperation对象(使用便利构造器的方法)

NSBlockOperation*blockoperation

= [NSBlockOperation blockOperationWithBlock:^{.........}];

***两个方法如果分别单独使用的时候要调用[operation start];

//创建一个队列管理器的方法(两种)

NSOperationQueue是一个队列管理器,可以根据operation任务自己分配线程,自己管理线程的生命周期

//在开发中,不需要管理线程的创建和销毁

//第一种

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

//第二种

//获取系统提供的主队列

NSOperationQueue*mainQueue = [NSOperationQueue mainQueue];

//把operation对象添加到队列管理器当中,不用调用开始的方法

[queue addOperation:blockoperation];

[queue addOperation:operation];

//给两个任务添加依赖关系,这两个任务就会按照依赖关系顺序进行

[operation addDependency:blockoperation];

//最大线程并发数

// maxConcurrentOperationCount表示同时执行任务的最大数量

//即使只执行一个任务,系统有的时候也会开辟多个线程去执行这个任务

quew.maxConcurrentOperationCount= 1;


//GCD获取串行和并行的方法各有俩个

*****创建一个串行的队列

//使用系统提供的一个串行的队列(主队列)

dispatch_queue_tqueue = dispatch_get_main_queue();

//自定义创建一个串行队列

//第一个参数:系统提供一个宏

//第二个参数:系统保留字段0

dispatch_queue_t queue = dispatch_queue_create(DISPATCH_QUEUE_SERIAL, 0);

*****创建一个并行的队列

//第一种获取系统提供的并行队列

dispatch_queue_t queue =

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);

//自己创建一个并行队列

dispatch_queue_t queue = dispatch_queue_create ("myQueue",DISPATCH_QUEUE_CONCURRENT);


创建分组

//创建分组

dispatch_group_t group = dispatch_group_create();

//创建一个队列()

dispatch_queue_t queue = dispatch_queue_create ("myQueue",DISPATCH_QUEUE_CONCURRENT);

//向分组中添加一个任务

dispatch_group_async(group, queue, ^{

NSLog(@"第一个任务");

});

//向分组中添加结束任务([不要讲结束任务放在第一个位置])

dispatch_group_notify(group, queue, ^{

NSLog(@"我是最后一个");

});

dispatch_group_async(group, queue, ^{

NSLog(@"第二个任务");

});

表示几秒后做某事

//dispatch_after(dispatch_time(DISPATCH_TIME_NOW,

(int64_t)(3.f*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

//NSLog(@"死去时快快快");

//});

重复的向一个队列中添加一系列的任务

dispatch_queue_t queue = dispatch_queue_create(0,

DISPATCH_QUEUE_SERIAL);

 

posted on 2016-04-09 11:34  钎探穗  阅读(147)  评论(0编辑  收藏  举报