zoukankan      html  css  js  c++  java
  • iOS 关于多线程的一些知识点(不断更新)

    1.NSOperation

    对于NSOperation,In OS X v10.6 and later, operation queues ignore the value returned by this method and always start operations on a separate thread.就是一个operation就新建一个thread。但是,这个说法是针对 NSOperationQueue *testQueue = [[NSOperationQueue alloc] init]; 这种queue来说的,如果向mainQueue中加入operation,那么这些operation一定会执行在main thread中,而且他们会串行执行。

    下面是关于mainQueue方法的一部分说明:

    The returned queue executes one operation at a time on the app’s main thread. 

    下面看一段例子

     NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
        [mainQueue addOperationWithBlock:^{
    
            for(int i=0;i<200;i++)
            {
                NSLog(@"i is %d",i);
            }
    
        }];
    
        [mainQueue addOperationWithBlock:^{
    
            for(int m=0;m<200;m++)
            {
                NSLog(@"m is %d",m);
            }
    
        }];

    以下是它的部分输出

    2014-05-05 10:21:55.000 OperationQueueTest[9876:60b] i is 194
    2014-05-05 10:21:55.001 OperationQueueTest[9876:60b] i is 195
    2014-05-05 10:21:55.001 OperationQueueTest[9876:60b] i is 196
    2014-05-05 10:21:55.002 OperationQueueTest[9876:60b] i is 197
    2014-05-05 10:21:55.002 OperationQueueTest[9876:60b] i is 198
    2014-05-05 10:21:55.003 OperationQueueTest[9876:60b] i is 199
    2014-05-05 10:21:55.004 OperationQueueTest[9876:60b] m is 0
    2014-05-05 10:21:55.004 OperationQueueTest[9876:60b] m is 1
    2014-05-05 10:21:55.004 OperationQueueTest[9876:60b] m is 2
    2014-05-05 10:21:55.005 OperationQueueTest[9876:60b] m is 3
    2014-05-05 10:21:55.005 OperationQueueTest[9876:60b] m is 4
    2014-05-05 10:21:55.006 OperationQueueTest[9876:60b] m is 5
    2014-05-05 10:21:55.006 OperationQueueTest[9876:60b] m is 6
    2014-05-05 10:21:55.007 OperationQueueTest[9876:60b] m is 7
    2014-05-05 10:21:55.017 OperationQueueTest[9876:60b] m is 8
    2014-05-05 10:21:55.017 OperationQueueTest[9876:60b] m is 9
    2014-05-05 10:21:55.018 OperationQueueTest[9876:60b] m is 10
    2014-05-05 10:21:55.018 OperationQueueTest[9876:60b] m is 11
    2014-05-05 10:21:55.019 OperationQueueTest[9876:60b] m is 12

    可以看出,加入mainQueue后,两个operation是顺序执行的。

    再看下面一段代码

      NSOperationQueue *testQueue = [[NSOperationQueue alloc] init];
        [testQueue addOperationWithBlock:^{
    
            NSLog(@"111111  thread is %@",[NSThread currentThread]);
            for(int i=0;i<200;i++)
            {
                NSLog(@"i is %d",i);
            }
    
        }];
    
        [testQueue addOperationWithBlock:^{
            NSLog(@"222222 thread is %@",[NSThread currentThread]);
            for(int m=0;m<200;m++)
            {
                NSLog(@"m is %d",m);
            }
            
        }];

    下面是它的部分输出

    2014-05-05 10:27:59.566 OperationQueueTest[9898:1303] i is 186
    2014-05-05 10:27:59.566 OperationQueueTest[9898:1303] i is 187
    2014-05-05 10:27:59.564 OperationQueueTest[9898:3507] m is 183
    2014-05-05 10:27:59.566 OperationQueueTest[9898:1303] i is 188
    2014-05-05 10:27:59.566 OperationQueueTest[9898:1303] i is 189
    2014-05-05 10:27:59.567 OperationQueueTest[9898:1303] i is 190
    2014-05-05 10:27:59.567 OperationQueueTest[9898:1303] i is 191
    2014-05-05 10:27:59.568 OperationQueueTest[9898:1303] i is 192
    2014-05-05 10:27:59.568 OperationQueueTest[9898:1303] i is 193
    2014-05-05 10:27:59.568 OperationQueueTest[9898:1303] i is 194
    2014-05-05 10:27:59.569 OperationQueueTest[9898:1303] i is 195
    2014-05-05 10:27:59.569 OperationQueueTest[9898:1303] i is 196
    2014-05-05 10:27:59.567 OperationQueueTest[9898:3507] m is 184
    2014-05-05 10:27:59.570 OperationQueueTest[9898:3507] m is 185
    2014-05-05 10:27:59.569 OperationQueueTest[9898:1303] i is 197
    2014-05-05 10:27:59.571 OperationQueueTest[9898:1303] i is 198
    2014-05-05 10:27:59.572 OperationQueueTest[9898:1303] i is 199
    2014-05-05 10:27:59.571 OperationQueueTest[9898:3507] m is 186
    2014-05-05 10:27:59.573 OperationQueueTest[9898:3507] m is 187
    2014-05-05 10:27:59.573 OperationQueueTest[9898:3507] m is 188
    2014-05-05 10:27:59.574 OperationQueueTest[9898:3507] m is 189
    2014-05-05 10:27:59.575 OperationQueueTest[9898:3507] m is 190
    2014-05-05 10:27:59.575 OperationQueueTest[9898:3507] m is 191
    2014-05-05 10:27:59.576 OperationQueueTest[9898:3507] m is 192
    2014-05-05 10:27:59.577 OperationQueueTest[9898:3507] m is 193

    可以看出Operation是同时在运行的,它们运行在2个不同的thread中!

  • 相关阅读:
    scrapy 命令行传参 以及发送post请求payload参数
    scrapy框架+selenium的使用
    python 制作GUI页面以及多选框、单选框
    上线操作
    在Linux中使用selenium(环境部署)
    解读Java NIO Buffer
    Maven自定义Archetype
    解决spark streaming集成kafka时只能读topic的其中一个分区数据的问题
    在windows下使用pip安装python包遇到缺失stdint.h文件的错误
    maven-shade-plugin插件未生效原因分析
  • 原文地址:https://www.cnblogs.com/breezemist/p/3708638.html
Copyright © 2011-2022 走看看