一、NSOperation简介
 
 1.简单说明
 
 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程
 
 NSOperation和NSOperationQueue实现多线程的具体步骤:
 
 (1)先将需要执行的操作封装到一个NSOperation对象中
 
 (2)然后将NSOperation对象添加到NSOperationQueue中
 
 (3)系统会⾃动将NSOperationQueue中的NSOperation取出来
 
 (4)将取出的NSOperation封装的操作放到⼀条新线程中执⾏
 
 2.NSOperation的子类
 
 NSOperation是个抽象类,并不具备封装操作的能力,必须使⽤它的子类
 
 使用NSOperation⼦类的方式有3种:
 
 (1)NSInvocationOperation
 
 (2)NSBlockOperation
 
 (3)自定义子类继承NSOperation,实现内部相应的⽅法

/*************************************************************/
//即默认情况下,如果操作没有放到队列中queue中,都是同步执行。只有将NSOperation放到一个NSOperationQueue中,才会异步执行操作
NSLog(@"主线程---%@",[NSThread currentThread]);
NSInvocationOperation *operation1=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test1) object:nil];
[operation1 start];
/*************************************************************/
//注意:只要NSBlockOperation封装的操作数 > 1,就会异步执行操作
NSBlockOperation *operation2=[NSBlockOperation blockOperationWithBlock:^{
for (int i=; i<; i++) { NSLog(@"NSBlockOperation1----%@",[NSThread currentThread]);}
}]; [operation2 addExecutionBlock:^{
for (int i=; i<; i++) { NSLog(@"NSBlockOperation2----%@",[NSThread currentThread]);}
}];
[operation2 addExecutionBlock:^{
for (int i=; i<; i++) { NSLog(@"NSBlockOperation3----%@",[NSThread currentThread]); }
}];
//放入队列后就不需要这句;
[operation2 start]; /*************************************************************/
/*1)先将需要执行的操作封装到一个NSOperation对象中 (2)然后将NSOperation对象添加到NSOperationQueue中 (3)系统会⾃动将NSOperationQueue中的NSOperation取出来 (4)将取出的NSOperation封装的操作放到⼀条新线程中执⾏
*/ NSInvocationOperation *operation3=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test3) object:nil];
NSInvocationOperation *operation4=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test4) object:nil]; NSOperationQueue *queue=[[NSOperationQueue alloc]init];
[queue addOperation:operation2];
[queue addOperation:operation3];
[queue addOperation:operation4];
/*************************************************************/

-(void)test1{
NSLog(@"operation1--test1---%@",[NSThread currentThread]);
}
-(void)test3{
for (int i=; i<; i++) { NSLog(@"NSOperationQueue-test3----%@",[NSThread currentThread]);
} }
-(void)test4{
for (int i=; i<; i++) { NSLog(@"NSOperationQueue--test4---%@",[NSThread currentThread]);
}
}

线程9--NSOperation的更多相关文章

  1. NSThread 子线程 Cocoa NSOperation GCD(Grand Central Dispatch) 多线程

    单词:thread 英 θred:n 线.思路.vt 穿过.vi 穿透过 一.    进程.线程 进程:正在进行中的程序被称为进程,负责程序运行的内存分配,每一个进程都有自己独立的虚拟内存空间 线程: ...

  2. 创建线程方式-NSOperation

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  3. 线程2 NSOperation 抽像类的使用

    // // ZYOperationViewController.h // Thread // // Created by yejiong on 14 // // ZYOperation.h // Th ...

  4. IOS-多线程(NSOperation)

    一.基础用法 // // ViewController.m // IOS_0120_NSOperation // // Created by ma c on 16/1/20. // Copyright ...

  5. 4.4 多线程进阶篇<下>(NSOperation)

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人"简书" 本文源码 Demo 详见 Github https://github.c ...

  6. NSOperation、NSOperationQueue(II)

    NSOperationQueue 控制串行执行.并发执行 NSOperationQueue 创建的自定义队列同时具有串行.并发功能 这里有个关键属性 maxConcurrentOperationCou ...

  7. iOS线程开发小结

    在iOS开发线程操作时,一般方法名决定是否开启新线程(async,sync),队列类型(全局队列,串行队列)决定开启多少条线程 1.快速线程调用 *开启后台线程执行任务 [self performSe ...

  8. iOS线程之——NSCondition

    多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c虽然源于c,但其多线程编程却相当简单,可以与java相媲美.这篇文章主要从线程创建与启动.线程的同步与锁.线程的交互.线 ...

  9. iOS:操作队列实现多线程NSOperation

    NSOperation具体使用:直接继承NSObject 它的子类有:NSBlockOperation.NSInvocationOperation 还有一个必须的类,队列,用来装创建的线程 NSOpe ...

  10. iOS线程浅析

    一.线程概述 1. iOS里面的线程按种类可分为同步线程和异步线程.同步线程指调用同步线程的地方必须等到同步线程运行完成才干够继续向下运行.而调用异步线程的地方则在运行完调用异步线程的语句后就能够继续 ...

随机推荐

  1. 792. Number of Matching Subsequences

    Given string S and a dictionary of words words, find the number of words[i] that is a subsequence of ...

  2. LOJ#3088. 「GXOI / GZOI2019」旧词(树剖+线段树)

    题面 传送门 题解 先考虑\(k=1\)的情况,我们可以离线处理,从小到大对于每一个\(i\),令\(1\)到\(i\)的路径上每个节点权值增加\(1\),然后对于所有\(x=i\)的询问查一下\(y ...

  3. UUID,加密解密算法的使用

    注意的地方: Base64Encoder,Base64Decoder并不属于JDK标准库范畴,但是又包含在了JDK中 解决方法:按照如下方法设置Eclipse导入%JAVA_HOME%\jre\lib ...

  4. JavaScript 之基础知识

    JavaScript 基础知识 JavaScript 是属于网络的脚本语言! JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用. JavaS ...

  5. 2019CVPR《Mask Scoring R-CNN》

    题目:<Mask Scoring R-CNN> CVPR 2019 Oral Paper(2017年783篇论文,获得口头报道的有215篇,oral paper很有含金量) 华中科技大学h ...

  6. Excel中复杂跨行跨列数据

    XSSFWorkbook wb = new XSSFWorkbook(); // 工作表 XSSFSheet sheet = wb.createSheet("车辆使用情况统计"); ...

  7. 原生JavaScript的DOM操作方法总结

    什么是DOM? DOM即文档对象模型,Document Object Model.  是HTML和XML文档的编程接口.它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从 ...

  8. css网页布局 --- 左边固定,右边自适应

    div的布局统一如下: <body> <div class="wrap"> <div class="left"></d ...

  9. python中map()函数

    map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. map()是 Python 内 ...

  10. Mina的客户端

    (一) package client; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.a ...