1.NSInvocationOperation

  创建NSInvocationOperation对象

    - (id)initWithTarget:(id)target selector:(SEL)sel object:(id)arg;

  调用start方法开始执行操作

    - (void)start;

    一旦执行操作,就会调用target的sel方法

  注意
    默认情况下,调用了start方法后并不会开一条新线程去执行操作,而是在当前线程同步执行操作
    只有将NSOperation放到一个NSOperationQueue中,才会异步执行操作
 -(void)invocation
{
// NSOperation *op = [[NSOperation alloc]init]; /*
第一个参数:目标对象
第二个参数:选择器,要调用的方法
第三个参数:方法要传递的参数
*/
NSInvocationOperation *op = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download) object:nil];
//
// //启动操作
[op start]; }
-(void)download
{
NSLog(@"---%s---%@",__func__,[NSThread currentThread]);
}

示例

2.NSBlockOperation

  创建NSBlockOperation对象

    + (id)blockOperationWithBlock:(void (^)(void))block;

  通过addExecutionBlock:方法添加更多的操作

    - (void)addExecutionBlock:(void (^)(void))block;

  注意:只要NSBlockOperation封装的操作数 > 1,就会异步执行操作

 -(void)blockOperation
{
//1.封装操作
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
//在主线程
NSLog(@"1------%@",[NSThread currentThread]); }]; NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"2------%@",[NSThread currentThread]);
}]; //2.追加操作
//在子线程中执行
[op1 addExecutionBlock:^{
NSLog(@"3------%@",[NSThread currentThread]);
}];
[op1 addExecutionBlock:^{
NSLog(@"4------%@",[NSThread currentThread]);
}]; [op1 addExecutionBlock:^{
NSLog(@"5------%@",[NSThread currentThread]);
}]; //3.启动操作执行
[op start];
[op1 start]; }

示例

3.自定义子类继承NSOperation,实现内部相应的方法

  自定义的子类要实现-(void) Main方法

  如下:

  

#import "YSOperation.h"

@implementation YSOperation

//1.高封装,信息隐蔽
//2.复用性
-(void)main
{
NSLog(@"---main---%@",[NSThread currentThread]);
NSLog(@"1------%@",[NSThread currentThread]);
}
@end -------------------------------------------------------------------------------------------- -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
YSOperation *op = [[YSOperation alloc]init];
YSOperation *op1 = [[YSOperation alloc]init];
[op start];
[op1 start]; // [[NSThread alloc]init] } 示例

示例

NSOperation的几种使用方式的更多相关文章

  1. iOS- NSThread/NSOperation/GCD 三种多线程技术的对比及实现

    1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 ...

  2. iOS- NSThread/NSOperation/GCD 三种多线程技术的对比及实现 -- 转

    1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 ...

  3. NSThread/NSOperation/GCD 三种多线程技术

    1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 ...

  4. Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...

  5. CSS垂直居中的11种实现方式

    今天是邓呆呆球衣退役的日子,在这个颇具纪念意义的日子里我写下自己的第一篇博客,还望前辈们多多提携,多多指教! 接下来,就进入正文,来说说关于垂直居中的事.(以下这11种垂直居中的实现方式均为笔者在日常 ...

  6. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

  7. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

  8. Android开发之基本控件和详解四种布局方式

    Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...

  9. 通过三个DEMO学会SignalR的三种实现方式

    一.理解SignalR ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信(即:客户端(Web页面)和服务器端可以互相实时的通知消息 ...

随机推荐

  1. linux上使用shell脚本查看内存使用率

    如上的内存利用率 = [-/+buffers/cache:used]/[Mem:total ] =  6293404 / 16333656 对于free命令而言,有如下公式: total = used ...

  2. JavaScript中concat()方法

    concat(参数) 用于数组之间的连接, arrayObject.concat(arrayX,arrayX,......,arrayX) 如: var a = [1,2,3]; document.w ...

  3. PHP 中:: -> self $this 操作符的区别

    访问PHP类中的成员变量或方法时, 如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就必须使用操作符::, 反之如果被引用的变量或者方法没有被声明成 const ...

  4. EasyUI相关

    失去焦点事件 validType:'length[4,15]',events:{blur: function(){}} 添加自定义属性 $.extend($.fn.validatebox.defaul ...

  5. [原创]WPF应用MediaPlayer播放声音断续、不全解决方案

    1.检查扬声器和驱动程序. 测试方法:首先,应用Windows Media Player播放器播放,看是否有问题,如果有问题,基本断定是驱动程序问题.其次,点击扬声器,选择测试,查看扬声器是否好用,如 ...

  6. Transport Block Size, Throughput and Code rate-----http://www.simpletechpost.com/2012/12/transport-block-size-code-rate-protocol.html

    Transport Block Size, Throughput and Code rate   Since the size of transport block is not fixed, oft ...

  7. KETTLE 配置资源库

    KETTLE 是一款开源的ETL工具,通过图形界面进行设计,可以对数据进行转换.设计好的文件分为两类,一类是trans,一类是job,这些文件可以存储到文件系统中.   也可以存储到数据库中.   如 ...

  8. 在为ListView设置adapter时出错

    为listView设置adapter,代码如下: SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.m ...

  9. Handle机制的原理

    Android提供了Handle和Looper来满足线程间的通信.Handle先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(Message Exchange). 1.Looper: ...

  10. [并查集] POJ 1182 食物链

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 66294   Accepted: 19539 Description ...