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. replace和replaceAll的区别

      replace和replaceAll是JAVA中常用的替换字符的方法,它们的区别是: 1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(Cha ...

  2. 5种风格的 jQuery 分页效果【附代码】

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  3. linux性能监测与优化

    top命令命令功能top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息的监测系统性能和运行信息的实用工具.命令语法top(选项)选项说明-b:以批处理模式操作;-d:屏幕刷新间隔时间. ...

  4. 架构(Architecture)和框架(Framework)杂谈

    1. 架构和框架的设计层次不同       类似于硬件设计,软件设计也分为不同的层次.典型的软件设计层次如下图:        在这个图中我们可以看到,Framework处于Micro-archite ...

  5. hdu 2050 折线分割平面

    训练递推用题,第一次做这个题,蒙的,而且对了. #include <stdio.h> int main(void) { int c,a; scanf("%d",& ...

  6. 锋利的jQuery-3--用js给多选的checkbox或者select赋值

    单选的select: <select id="single"> <option>Single</option> <option>Si ...

  7. DedeCMS V5.7 Dialog目录下配置文件XSS漏洞

    漏洞地址及证明:/include/dialog/config.php?adminDirHand="/></script><script>alert(1);< ...

  8. mysql-binlog日志恢复数据库

    binlog日志用于记录所有更新了数据或者已经潜在更新了数据的所有语句.语句以“事件”的形式保存,它描述数据更改.当我们因为某种原因导致数据库出现故障时,就可以利用binlog日志来挽回(前提是已经配 ...

  9. WPF 窗口自定义拉伸

    .NET技术交流群 199281001 .欢迎加入. //自定义窗体拉伸 public HwndSource _HwndkaifaSource; private const int WM_SYSCOM ...

  10. JavaScriptSerializer中日期序列化问题解决方案

    JavaScriptSerializer中日期序列化问题解决方案 直接进入主题: class Student { public int age { get; set; } public DateTim ...