iOS开发-多线程编程

原创 2015年07月09日 11:38:46

按照抽象层次,有三种多线程编程方法。
一、NSThread
需要管理线程的生命周期、同步、加锁问题,导致一定的性能开销。

//1.动态方法
{
//初始化线程
NSThread *thread=[[NSThread alloc]initWithTarget:self @selector(run) object:nil];
//设置优先级
thread.threadPriority=1;
//开启线程
[thread start];
}

//2.静态方法
{
    //调用完毕,会马上创建并开启线程
    [NSThread detachNewThreadSelector:@selector(run) withObject:nil];
}

//3.隐式创建线程
{
    [self performSelectorInBackground:@selector(run) withObject:nil];
}

//4.获取当前线程
{
    NSThread *thread=[NSThread currentThread];
}

//5.获取主线程
{
    NSThread *thread=[NSThread mainThread];
}

//6.暂停当前线程
{
    //Method one
    [NSThread sleepForTimeInteval:2];
    //Method two
    NSDate *date=[NSDate dateWithTimeInteval:2 sinceDate:[NSDate date]];
    [NSThread sleepUntilDate:date];
}
//7.线程间通信
{
    //指定线程上执行通信
    [self performSelector:@selector(run) onThread:thread withObject:nil waitUntilDone:YES];

    //在主线程上执行操作
    [self performSelectorOnMainThread:@selector(run) withObject:nil waitUntilDone:YES];

    //在当前线程上执行操作
    [self performSelector:@selector(run) withObject:nil];
}

二、NSOperation
1、实例封装了需要执行的操作和操作所需的数据,并以并发或非并发的方式执行这个操作。
NSOperation是一个抽象类,必须使用它的子类,2种方式:
~1 NSInvocationOperation和NSBlockOperation
~2 自定义子类基层NSOperation,实现内部相应的方法

2、执行操作
调用start方法开始执行操作,默认按同步的方式执行。

3、取消操作

[operation cancel];

4、监听操作的执行
需要在执行完毕后做一些事情,就调用setCompletionBlock方法设置

{
    //Method one
    operation.completionBlock=^(){
        //coding.
    }

    //Method two
    [operation setCompletionBlock:^(){}];
}

5.NSInvocationOperation
基于一个对象和selector来创建。

{
    //创建并执行
    NSInvocationOperation *operation=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(run) object:nil];
    [operation start];
}

6、NSBlockOperation
并发,一个或者多个block对象。

NSBlockOperation *operation=[NSBlockOperation blockOperationWithBlock:^(){}];   
[operaion start];

7、通过addExecutionBlock方法添加block操作

[operation addExecutionBlock:^(){
    //code
}];

8、NSOperationQueue
将NSOperation添加到一个NSOperationQueue中异步执行。

//创建一个队列
NSOperationQueue *queue=[[NSOperationQueue alloc]init];

//添加一个操作到队列中
[queue addOperation:operation];

//添加一系列操作到队列中
[queue addOperations:operations waitUntilFinished:NO];

//添加一个block操作
[queue addOperationWithBlock:^(){
    NSLog(@"线程:%@",[NSThread currentThread]);
}];

9、添加NSOperation的依赖对象
某个NSOperation对象依赖于其他NSOperation对象时,就通过addDependency方法添加一个或者多个依赖的对象,只有所有依赖的对象都完成后,当前的NSOperation才会开始执行操作。

[operation2 addDependency:operation1];

另外,通过removeDependency方法删除依赖对象。不局限于相同queue中的NSOperation对象。唯一的限制不能创建环形依赖。

10、取消Operations
一旦添加操作到队列中,这个队列有拥有了这个对象,唯一能做的就是取消。

[operation cancel];
[queue cancelAllOperations];

三、GCD
苹果公司推出的解决方案,基于C语言。
使用GCD,完全由系统管理线程,次序定义想要执行的任务,然后添加到适当的调度队列。
遵守FIFO原则。

GCD还没弄明白。所以就没代码。

版权声明:本文为博主原创文章,未经博主允许不得转载。

IOS开发——多线程编程

1.“省电,流畅,优质应用,响应速度快,用户体验好……”也许是众多用户眼中的苹果系统。 2.在众手机商拼CPU主频,拼4核,8核的年代,苹果依然坚持双核,iphone用户体验仍然坚挺。 可以说,Ru...
  • u013629554
  • u013629554
  • 2014年07月31日 22:09
  • 1180

iOS开发-------多线程编程

在大学里接触了一部分编程语言,如C++,Java,C#,虽然学的不是很好,但是每每提到多线程,总会感觉很高大上,毕竟学语言的一开始都不会接触到这一部分。        需要明白的是,每一个程序不是一个...
  • RunIntoLove
  • RunIntoLove
  • 2015年10月01日 17:19
  • 426

iOS开发------多线程编程(1)

// // ViewController.h // UI22_MultiThreadProgranming // // Created by l on 15/10/6. // Copyrigh...
  • GiveWater
  • GiveWater
  • 2015年10月06日 21:31
  • 259

iOS开发——多线程编程(GCD)

Grand Central Dispatch简介Grand Central Dispatch 简称 GCD 是苹果公司开发的技术,是对于多核编程的较新解决方案。它主要用于优化应用程序以支持多核处理器以...
  • u012350430
  • u012350430
  • 2016年06月18日 10:45
  • 3482

iOS开发--多线程编程(一)NSThread

当用户下载资源,进行图像处理,耗时数据处理等任务时 往往希望操作这个任务的时候 其他操作不会被中断 这时候 就用到多线程 在单线程中一个线程只能执行一个任务,一个任务处理不完...
  • CloverZhu
  • CloverZhu
  • 2016年04月26日 16:01
  • 262

iOS开发--多线程编程(三)NSOperation

NSOperation 是一个基类(抽象类)不能直接使用,必须使用他的子类 它默认是在当前线程 进行操作 如果单独使用 NSOperation 必须手动启动  常与 NSOperationQueue...
  • CloverZhu
  • CloverZhu
  • 2016年04月27日 15:45
  • 304

iOS开发------多线程编程(2)

第一种方法- (IBAction)didClick:(id)sender { // NSThread * thread = [[NSThread alloc]initWithTarget:sel...
  • GiveWater
  • GiveWater
  • 2015年10月06日 21:41
  • 210

多线程编程php

早期的php并不支持多线程编程,采用curl_muti系列族模拟实现多线程,到现在已经可以实现多线程编程,并且线程安全机制ZTS( zend thread safe)多线程安全就是保证多个线程安全存取...
  • qq_21034239
  • qq_21034239
  • 2016年12月30日 10:31
  • 346

C++面向对象多线程编程简介

多线程编程引发的问题:死锁、无限延迟、数据竞争等。并发编程包括多任务(多进程)和多线程。 使用多线程编程时需包含头文件,具体测试程序代码如下: #include #include using na...
  • Alex123980
  • Alex123980
  • 2016年06月29日 11:32
  • 711

MFC多线程编程之二——MFC中的多线程开发

五、MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程没有消息机制,...
  • Arcsinsin
  • Arcsinsin
  • 2013年11月19日 22:02
  • 4260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS开发-多线程编程
举报原因:
原因补充:

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