#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

/*---------------------------NSOperation--------------------------------------*/
    //创建线程队列(线程池)
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
   
    //关闭暂停队列
    [queue setSuspended:YES];
   
    //设置最大并发数
    queue.maxConcurrentOperationCount = 1;
   
    //创建线程
    NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread1:) object:@"op1"];
    //设置线程的优先级
    operation1.queuePriority = NSOperationQueuePriorityNormal;
   
    NSInvocationOperation *operation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread2:) object:@"op2"];
    //设置优先级
    operation2.queuePriority = NSOperationQueuePriorityHigh;
   
    //将线程添加到队列中
    [queue addOperation:operation1];
    [queue addOperation:operation2];
   
    //方式二:block
    [queue addOperationWithBlock:^{
       
        @autoreleasepool {
            for (int i=0; i<50; i++) {
                NSLog(@"op3:%d",i);
            }
        }
       
    }];
   

   
    //开始队列 —在并发数为1的时候能让后加入队列的最先打印出来
    [queue setSuspended:NO];
   
}

- (void)thread1:(NSString *)threadName {

@autoreleasepool {
        for (int i=0; i<50; i++) {
            NSLog(@"thread1:%d",i);
        }
       
    }
   
}

- (void)thread2:(NSString *)threadName {
   
    @autoreleasepool {
       
        for (int i=0; i<50; i++) {
            NSLog(@"thread2:%d",i);
        }
       
        [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeAction) userInfo:nil repeats:YES];
       
       
//        [[NSRunLoop currentRunLoop] run];
       
    }
   
}

- (void)timeAction {

NSLog(@"timeAction");
   
}

@end

多线程NSInvocationOperation(NSOperationQueue)的基本用法的更多相关文章

  1. iOS 开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  2. iOS开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  3. c/c++ 多线程 等待一次性事件 packaged_task用法

    多线程 等待一次性事件 packaged_task用法 背景:不是很明白,不知道为了解决什么业务场景,感觉std::asynck可以优雅的搞定一切,一次等待性事件,为什么还有个packaged_tas ...

  4. c#多线程中Lock()关键字的用法小结

    本篇文章主要是对c#多线程中Lock()关键字的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助     本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段 ...

  5. Android多线程全面解析:IntentService用法&源码

    前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 继承Thread类 实现Runnable接口 AsyncTask Handler HandlerThread IntentSer ...

  6. java多线程详解(5)-Threadlocal用法

    ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路. 使用这个工具类可以很简洁 ...

  7. java多线程中synchronized关键字的用法

    转自:http://www.cdtarena.com/javapx/201308/9596.html 由于同一进程内的多个线程共享内存空间,在Java中,就是共享实例,当多个线程试图同时修改某个实例的 ...

  8. 多线程的并发问题,lock用法

    开启多个线程,每个线程中多次操作公共变量 using System; using System.Collections.Generic; using System.Linq; using System ...

  9. IOS开发 多线程编程 - NSOperationQueue

    一.简介 一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的.也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步 ...

随机推荐

  1. Android sharePreference使用

    SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数. SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/ ...

  2. Mac上的欧路词典单词本迁移到有道词典 #node.js

    摘要 有道词典提供了柯林斯和朗文辞典,加上最近在背单词且Mac版的屏幕取词也够用了,为了云单词本的同步,决定抛弃Mac上的欧路词典.单词欧路上的单词本也存了一百多个单词.怎样迁移到有道呢? 关键词:n ...

  3. fastjson将json字符串转化成bean对象解析出错的检查方法

    我的情况是:解析第一层数据成功,解析第二层嵌套的数据失败.如: { "response": { "resultcode": "0", &qu ...

  4. vue路由的简单实例

    vue2.0 和 vue1.0 路由的语法还是有点稍微的差别,下面介绍一下vue-router 2的简单实例: <!DOCTYPE html> <html lang="en ...

  5. SQLSERVER进程CPU使用率100%

    解决SQLSERVER2008 CPU使用率99%: 1.dbcc checkdb 重建索引 2.檢查有沒有死鎖 -- sp_lock SELECT request_session_id spid , ...

  6. CDN系统对网站的性能有极大的提升

    CDN系统对网站的性能有极大的提升 打开一个网站 我们只是请求了一个页面.单个页面,实际上所有文件都是一个新的请求.以新浪为例一共发起了35个请求. 这35个请求中.只有一个动态内容.其它均为静态.这 ...

  7. python 入门学习之环境搭载

    1.常用python 2.7 需要在我的电脑环境变量进行环境搭载 2.用notepad++进行编辑器适配,选择python语言 在输入运行程序名里面输入cmd /k x: & cd " ...

  8. Shell文本处理 - 匹配与编辑

    正则表达式 符号 含义 . 匹配任意ASCII中任意单个字符,或是字母,或是数字 ^ 匹配行首 $ 匹配行尾 * 匹配任意字符或前一个的一次或多次重复 \ 转义,被转义的有$ . ‘ “ * [ ] ...

  9. php [] array的区别

    <?php/** * Created by IntelliJ IDEA. * User: Administrator * Date: 2017/1/2 * Time: 17:40 定义数组 ar ...

  10. DHCP配置

    DHCP服务器IP:192.168.1.10 一,安装dhcp [root@localhost ~]# yum install dhcp Loaded plugins: product-id, sub ...