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. hdu1542矩阵的并 线段树+扫描线

    求矩阵的并,也就是要求所有的面积.那可以吧总的图形按照矩阵来切割.使其为一块一块. 输入的时候用坐标表示,这里扫描线从下到上扫描.初始时让下面的边为1,上面的为-1: 用一条先从下面开始想上扫描.遇到 ...

  2. Java设计模式-观察者模式(Observer)

    包括这个模式在内的接下来的四个模式,都是类和类之间的关系,不涉及到继承,学的时候应该 记得归纳,记得本文最开始的那个图.观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时, ...

  3. 【CodeForces 620D】Professor GukiZ and Two Arrays

    题 题意 两个数列,一个有n个数,另一个有m个数,让你最多交换两次两个数列的数,使得两个数列和的差的绝对值最小,求这个差的绝对值.最少交换次数.交换数对 分析 交换0次.1次可得到的最小的差可以枚举出 ...

  4. Operating System Memory Management、Page Fault Exception、Cache Replacement Strategy Learning、LRU Algorithm

    目录 . 引言 . 页表 . 结构化内存管理 . 物理内存的管理 . SLAB分配器 . 处理器高速缓存和TLB控制 . 内存管理的概念 . 内存覆盖与内存交换 . 内存连续分配管理方式 . 内存非连 ...

  5. java连接mysql(三)

    事务的四大特性(ACID) 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败.比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执行 ...

  6. HTTP负载测试——Tsung

    参考资料:http://blog.jobbole.com/87509/ 如何生成每秒百万级别的 HTTP 请求? 在进行负责测试时要牢记一件重要的事:你能在 Linux 上建立多少个 socket 连 ...

  7. MACD、BOLL、KDJ 三大组合精准把握趋势与买卖!

    先看示意图,下图是布林线的3个轨道,其他都是股价走势 图1 股价,在布林线上轨.下轨之间运作.准确说,这话是不符合逻辑的,不是先有的轨道,然后股价再按照轨道运动.因为轨道是跟股价同时变化的.但是,股价 ...

  8. Starting zabbix_agentd: No such file or directory

    问题描述 [root@localhost admin]# service zabbix_agentd restart Shutting down zabbix_agentd: [FAILED] Sta ...

  9. java分布式通信系统(J2EE分布式服务器架构)

    一.序言 近几个月一直从事一个分布式异步通信系统,今天就整理并blog一下. 这是一个全国性的通信平台,对性能,海量数据,容错性以及扩展性有非常高的要求,所以在系统的架构上就不能简单的采用集中式.简单 ...

  10. Windows下文件的所有和权限

    跟linux不同, 在linux下 ,文件的所有者,就拥有对文件的所有读写执行的权限, 而windows, 文件的所有者不一定对文件拥有所有的权限, 场景: 要对系统文件(windows\system ...