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. hdu1853 km算法

    //hdu1853 #include<stdio.h> #include<string.h> #define INF 99999999 ][],pr[],pl[],visr[] ...

  2. HYSBZ 4197 寿司晚宴

    Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同 ...

  3. groovy-真值

    Boolean expressions Groovy支持标准的条件运算符的布尔表达式: 1 def a = true 2 def b = true 3 def c = false 4 assert a ...

  4. Codeforces 567D One-Dimensional Battle Ships

    传送门 D. One-Dimensional Battle Ships time limit per test 1 second memory limit per test 256 megabytes ...

  5. WAMP 403 Forbidden禁止访问

    WAMP .5修改方法 修改httpd.conf文件 # onlineoffline tag - don't remove Require local To # onlineoffline tag - ...

  6. 文件流StreamReader和StreamWriter的使用

    using (StreamReader sr = new StreamReader(@"C:\Users\shuai\Desktop\文件流读取.txt", Encoding.De ...

  7. mysql 时间函数

    select UNIX_TIMESTAMP(Now());#获取unix时间戳1436430994 ::"时间形式

  8. web classpath 路径说明

    classpath路径在每个J2ee项目中都会用到,即WEB-INF下面的classes目录,所有src目录下面的java.xml.properties等文件编译后都会在此,所以在开发时常将相应的xm ...

  9. hdu 1049 Climbing Worm

    解题思路: 1. 两种情况,0x1:井深度小于一次跳的高度.0x2:井深度大于一次跳的高度 2.如果 属于 0x1 则一次跳出 3.否则 本次解题中直接枚举跳的次数 一直循环,直到 [每次跳的真实高度 ...

  10. route工具

    route工具 route工具主要用来查看或修改内核路由表. 1.查看内核路由表 route [-nee] 参数说明: -n:不要使用协议或主机名称,直接使用 IP 或 port number:-ee ...