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=;i<;i++)
{
NSLog(@"i is %d",i);
} }]; [mainQueue addOperationWithBlock:^{ for(int m=;m<;m++)
{
NSLog(@"m is %d",m);
} }];

以下是它的部分输出

-- ::55.000 OperationQueueTest[:60b] i is
-- ::55.001 OperationQueueTest[:60b] i is
-- ::55.001 OperationQueueTest[:60b] i is
-- ::55.002 OperationQueueTest[:60b] i is
-- ::55.002 OperationQueueTest[:60b] i is
-- ::55.003 OperationQueueTest[:60b] i is
-- ::55.004 OperationQueueTest[:60b] m is
-- ::55.004 OperationQueueTest[:60b] m is
-- ::55.004 OperationQueueTest[:60b] m is
-- ::55.005 OperationQueueTest[:60b] m is
-- ::55.005 OperationQueueTest[:60b] m is
-- ::55.006 OperationQueueTest[:60b] m is
-- ::55.006 OperationQueueTest[:60b] m is
-- ::55.007 OperationQueueTest[:60b] m is
-- ::55.017 OperationQueueTest[:60b] m is
-- ::55.017 OperationQueueTest[:60b] m is
-- ::55.018 OperationQueueTest[:60b] m is
-- ::55.018 OperationQueueTest[:60b] m is
-- ::55.019 OperationQueueTest[:60b] m is

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

再看下面一段代码

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

下面是它的部分输出

-- ::59.566 OperationQueueTest[:] i is
-- ::59.566 OperationQueueTest[:] i is
-- ::59.564 OperationQueueTest[:] m is
-- ::59.566 OperationQueueTest[:] i is
-- ::59.566 OperationQueueTest[:] i is
-- ::59.567 OperationQueueTest[:] i is
-- ::59.567 OperationQueueTest[:] i is
-- ::59.568 OperationQueueTest[:] i is
-- ::59.568 OperationQueueTest[:] i is
-- ::59.568 OperationQueueTest[:] i is
-- ::59.569 OperationQueueTest[:] i is
-- ::59.569 OperationQueueTest[:] i is
-- ::59.567 OperationQueueTest[:] m is
-- ::59.570 OperationQueueTest[:] m is
-- ::59.569 OperationQueueTest[:] i is
-- ::59.571 OperationQueueTest[:] i is
-- ::59.572 OperationQueueTest[:] i is
-- ::59.571 OperationQueueTest[:] m is
-- ::59.573 OperationQueueTest[:] m is
-- ::59.573 OperationQueueTest[:] m is
-- ::59.574 OperationQueueTest[:] m is
-- ::59.575 OperationQueueTest[:] m is
-- ::59.575 OperationQueueTest[:] m is
-- ::59.576 OperationQueueTest[:] m is
-- ::59.577 OperationQueueTest[:] m is

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

iOS 关于多线程的一些知识点(不断更新)的更多相关文章

  1. iOS中多线程常用的知识点

        1.pThread 跨平台的多线程技术 , 是IEEE制定的POSIX 表示可移植性操作系统接口的多线程计数,UNIX内核平台 Unix,Linux,Mac(小红帽) (windows上有可移 ...

  2. iOS中多线程知识总结(一)

    这一段开发中一直在处理iOS多线程的问题,但是感觉知识太散了,所以就把iOS中多线程的知识点总结了一下. 1.基本概念 1)什么是进程?进程的特性是什么? 进程是指在系统中正在运行的一个应用程序.   ...

  3. iOS开发——多线程篇——多线程介绍

    一.进程和线程1.什么是进程进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开迅雷.Xcode,系统就会分别启动2个进程 通过“活动监 ...

  4. iOS - Threads 多线程

    1.Threads 1.1 进程 进程是指在系统中正在运行的一个应用程序.每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内. 比如同时打开 QQ.Xcode,系统就会分别启动两个进程. ...

  5. iOS开发多线程--(NSOperation/Queue)

    iOS实现多线程的方式有三种,分别是NSThread.NSOperation.GCD. 关于GCD,请阅读GCD深入浅出学习 简介 NSOperation封装了需要执行的操作和执行操作所需的数据,提供 ...

  6. iOS开发——多线程OC篇&多线程详解

    多线程详解 前面介绍了多线程的各种方式及其使用,这里补一点关于多线程的概念及相关技巧与使用,相信前面不懂的地方看了这里之后你就对多线程基本上没有什么问题了! 1——首先ios开发多线程中必须了解的概念 ...

  7. iOS之多线程开发NSThread、NSOperation、GCD

    原文出处: 容芳志的博客   欢迎分享原创到伯乐头条 简介iOS有三种多线程编程的技术,分别是:(一)NSThread(二)Cocoa NSOperation(三)GCD(全称:Grand Centr ...

  8. ios 异步多线程 获取数据

    简介 iOS有三种多线程编程的技术,分别是: (一)NSThread  (二)Cocoa NSOperation (三)GCD(全称:Grand Central Dispatch)   这三种编程方式 ...

  9. 【iOS系列】-iOS的多线程解析

    [iOS系列]-iOS的多线程解析 iOS的多线程实现技术: 1:GCD -- Grand Central Dispatch 是基于C语言的底层API 用Block定义任务,使用起来非常灵活便捷 提供 ...

随机推荐

  1. 知道了grunt怎么用了

      第一步: //如何安装指定grunt的插件,安装后自动在当前cmd目录下新建node_modules文件夹,文件夹里面包含了下载完成的插件 npm install <module> - ...

  2. Java基础-内部类-为什么成员内部类可以无条件访问外部类

    在此之前,我们已经讨论过了成员内部类可以无条件访问外部类的成员,那具体究竟是如何实现的呢?下面通过反编译字节码文件看看究竟.事实上,编译器在进行编译的时候,会将成员内部类单独编译成一个字节码文件,下面 ...

  3. 【poj1144】 Network

    http://poj.org/problem?id=1144 (题目链接) 题意 求无向图的割点. Solution Tarjan求割点裸题.并不知道这道题的输入是什么意思,也不知道有什么意义= =, ...

  4. HDU 5714

    Problem Description 小明在旅游的路上看到了一条美丽的河,河上有许多船只,有的船只向左航行,有的船只向右航行.小明希望拍下这一美丽的风景,并且把尽可能多的船只都完整地拍到一张照片中. ...

  5. 清除TFS版本控制信息

    http://blog.csdn.net/feihu_guest/article/details/8442434 How to permanently remove TFS Source Contro ...

  6. DALSA Coreco - 图像处理软件(Sapera LT )

    http://blog.csdn.net/linglongyouzhi/article/details/3505845 概述 Sapera LT 是一套用于图像采集.显示和控制的独立于硬件以外的 C ...

  7. Support Vector Machines for classification

    Support Vector Machines for classification To whet your appetite for support vector machines, here’s ...

  8. hdu 2018 母牛的故事

    #include<stdio.h> int main(void) { int i,n,j,k; long long narr[60]; narr[1]=1; narr[2]=2; narr ...

  9. Visual Studio IIS Express 不支持.json后缀的mime类型

    vs默认web调试工具中并不支持.json后缀的mime类型. 如何解决,两个方案: 局部单应用:web.config: <system.webServer> .... <stati ...

  10. ios 文字上下滚动效果Demo

    http://pan.baidu.com/s/1qWj8vBQ