第三种:NSOperationQueue

 1 - (void)viewDidLoad {
 2     [super viewDidLoad];
 3     // Do any additional setup after loading the view, typically from a nib.
 4     /**
 5      * NSOperation不能直接进行多线程的创建,需要借助:NSOperationQueue
 6      */
 7
 8     // 使用NSOperation的第一个类去创建子线程
 9     NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(test) object:nil];
10     // 在单独使用NSOperation的子类创建子线程的时候,一定要启动才行
11 //    [operation start];
12
13     // 使用NSOperation的第二个子类创建子线程
14     NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
15         NSLog(@"我是block");
16         NSLog(@"current = %@", [NSThread currentThread]);
17         NSLog(@"main = %@", [NSThread mainThread]);
18     }];
19     // 启动
20 //    [blockOperation start];
21
22     // 在使用NSOperation的子类去创建线程的时候,实际上线程没有真正意义上的创建
23     // 需要把上班的两个线程,放到操作列队
24     // 一旦将创建的对象加入到操作队列中,就不能调用start方法,否则会造成崩溃
25     // add 和 start 不能共存
26     NSOperationQueue *queue = [[NSOperationQueue alloc] init];
27     // 最大的并发数量
28     // 当值设置为1的时候,可以叫做串行:即顺序执行
29     // 当设置大于1的时候,叫做并行:多条通道执行
30     queue.maxConcurrentOperationCount = 3;
31
32     [queue addOperation:operation];
33     [queue addOperation:blockOperation];
34 }
35
36 - (void)test {
37     NSLog(@"??");
38     NSLog(@"current = %@", [NSThread currentThread]);
39     NSLog(@"main = %@", [NSThread mainThread]);
40 }
时间: 2024-10-05 15:09:29

第三种:NSOperationQueue的相关文章

通过GCD、NSOperationQueue队列、NSThread三种方法来创建多线程

#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *remindLabel; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view,

iOS的三种多线程技术NSThread/NSOperation/GCD

1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的"并发"技术,使得程序员可以不再去关心线程的具体使用问题 NSOperation/NSOperationQueue 面向对象的线程技术 GCD -- Grand Central Dispatch(派发) 是基于C语言的框架,可以充分利用多核,是苹果推荐使用的多线程技术. 以上这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,

iOS- NSThread/NSOperation/GCD 三种多线程技术的对比及实现 -- 转

1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 ØNSOperation/NSOperationQueue 面向对象的线程技术 ØGCD —— Grand Central Dispatch(派发) 是基于C语言的框架,可以充分利用多核,是苹果推荐使用的多线程技术 以上这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Ap

三种方式使得iOS应用能够在后台进行数据更新和下载

三种方式使得iOS程序即使在关闭或崩溃的情况下也能够在后台持续进行一些任务,比如更新程序界面快照,下载文件等.这三个方法分别是 Background Fetch,Remote Notification和NSURLSession的backgroundSessionConfiguration Background Fetch 开启 首先在info plist文件中开启UIBackgroundModes的Background fetch.或者手动编辑这个值 <key>UIBackgroundMode

[精通Objective-C]三种实现并发编程的方式

[精通Objective-C]三种实现并发编程的方式 参考书籍:<精通Objective-C>[美] Keith Lee 目录 精通Objective-C三种实现并发编程的方式 目录 线程 隐式创建并启动线程 显示创建并启动线程 操作和操作队列 用操作类实现并发 用操作队列实现并发 分派队列GCD 三种方式的比较 线程 隐式创建并启动线程 使用NSObject类中的performSelectorInBackground: withObject:方法可以隐式地创建和启动用于执行对象中方法的新线程

IOS 三种线程操作方式详解

一.IOS 实现线程操作方式分别有:NSThread,Cocoa NSOperation,GCD(Grand Central Dispatch)三种; NSThread其优点:相比其他两个轻量级;缺点:需要自己管理线程的生命周期,线程同步; Cocoa Operation的优点:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上;实现相关类NSOperation,NSOperationQueue.NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用它定义

angularJs中关于ng-class的三种使用方式说明

在开发中我们通常会遇到一种需求:一个元素在不同的状态需要展现不同的样子. 而在这所谓的样子当然就是改变其css的属性,而实现能动态的改变其属性值,必然只能是更换其class属性 这里有三种方法: 第一种:通过数据的双向绑定(不推荐) 第二种:通过对象数组 第三种:通过key/value 下面简单说下这三种: 第一种:通过数据的双向绑定 实现方式: function changeClass(){   $scope.className = "change2"; } <div clas

Oracle基础学习2--Oracle登录与三种验证机制

首先,Oracle安装完毕有三个默认用户 ?  Sys:数据库对象的拥有者.权限最高.password在安装的时候(口令管理)能够改变 ?  System:数据库管理员,password为manager ?  Scott:一个普通用户,password为tiger 再看连接Oracle的三种验证机制 ?  操作系统验证(具体解释见以下) ?  password文件验证 ?  数据库验证 注:前两者适用于系统用户,比方:Sys.System等:最后一个适用于普通用户.比方:Scott. 再看Ora

Binlog的三种模式

binlog模式分三种(row,statement,mixed) 1.Row 日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改,只记录要修改的数据,只有value,不会有sql多表关联的情况. 优点:在row模式下,bin-log中可以不记录执行的sql语句的上下文相关的信息,仅仅只需要记录那一条记录被修改了,修改成什么样了,所以row的日志内容会非常清楚的记录下每一行数据修改的细节,非常容易理解.而且不会出现某些特定情况下的存储过程和function,以及trig

AngularJs学习——实现数据绑定的三种方式

三种方式: 方式一:<h5>{{msg}}</h5>  此方式在页面刷新的时候会闪现{{}} 方式二:<h5 ng-bind="msg"></h5> 方式三:<h5 ng-clock class="ng-clock">{{msg}}</h5> 示例代码: <!DOCTYPE html> <html lang="en" ng-app="myapp&q