zoukankan      html  css  js  c++  java
  • NSOperation多线程方式

      1 #import "ViewController.h"
      2 
      3 @interface ViewController ()
      4 
      5 @end
      6 
      7 @implementation ViewController
      8 
      9 - (void)viewDidLoad {
     10     [super viewDidLoad];
     11     // Do any additional setup after loading the view, typically from a nib.
     12 }
     13 //NSOperation的子类NSInvocationOperation
     14 //NSOperation 是一个抽象类(NSURLSession也是抽象类,用来封装子类,并不直接调用),与多线程没有关系,它是数据模型,保存代码段和数据
     15 - (IBAction)invocationOperation:(id)sender {
     16     NSInvocationOperation *invocationOp = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loopIn) object:nil];
     17     //执行操作
     18     [invocationOp start];
     19     
     20     
     21     
     22 }
     23 -(void)loopIn
     24 {
     25     
     26     for (int i = 0; i < 1000; i++) {
     27         //NSLog(@"a");
     28         NSLog(@"%@",[NSThread currentThread]);
     29     }
     30 }
     31 - (IBAction)blockOperation:(UIButton *)sender {
     32     
     33     NSBlockOperation *blockOp = [NSBlockOperation blockOperationWithBlock:^{
     34        //需要在线程里执行的内容
     35         for (int i = 0; i < 8; i++) {
     36             NSLog(@"%@",[NSThread currentThread]);
     37         }
     38     }];
     39     [blockOp start];
     40     
     41 }
     42 //线程队列
     43 - (IBAction)operationQueue:(id)sender {
     44     NSOperationQueue *queue = [[NSOperationQueue alloc] init];
     45     //可以创建队列后,设置最大的并发数
     46     queue.maxConcurrentOperationCount = 2;
     47     //循环添加一百个NSOperation
     48     for (int i = 0; i < 100; i++) {
     49         NSBlockOperation *blockOp = [NSBlockOperation blockOperationWithBlock:^{
     50             NSLog(@"%@",[NSThread currentThread]);
     51         }];
     52         //添加操作到线程队列中,添加后自动执行,不需要start
     53         [queue addOperation:blockOp];
     54     }
     55     
     56 }
     57 - (IBAction)invocationQueue:(id)sender {
     58     NSOperationQueue *queue = [[NSOperationQueue alloc] init];
     59     queue.maxConcurrentOperationCount = 2;
     60     for (int i = 0; i < 100; i++) {
     61         NSInvocationOperation *invocationOp = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(mengdefeng) object:nil];
     62         
     63         [queue addOperation:invocationOp];
     64     }
     65     
     66    
     67     
     68 }
     69 //输出当前线程
     70 -(void)mengdefeng
     71 {
     72     NSLog(@"%@",[NSThread currentThread]);
     73 }
     74 //线程的优先级
     75 - (IBAction)queuePriority:(id)sender {
     76     NSOperationQueue *queue = [[NSOperationQueue alloc] init];
     77     //设置最大并发数
     78     queue.maxConcurrentOperationCount = 1;
     79     for (int i = 0; i < 100; i++) {
     80         
     81         NSBlockOperation *blockOp1 = [NSBlockOperation blockOperationWithBlock:^{
     82             NSLog(@"1");
     83         }];
     84         NSBlockOperation *blockOp2 = [NSBlockOperation blockOperationWithBlock:^{
     85             NSLog(@"2");
     86         }];
     87         //设置操作的优先级
     88         blockOp1.queuePriority = NSOperationQueuePriorityVeryLow;
     89         blockOp2.queuePriority = NSOperationQueuePriorityVeryHigh;
     90         [queue addOperation:blockOp1];
     91         [queue addOperation:blockOp2];
     92     }
     93     
     94     
     95 }
     96 - (void)didReceiveMemoryWarning {
     97     [super didReceiveMemoryWarning];
     98 }
     99 
    100 @end
  • 相关阅读:
    moco-globalsettings
    moco-简述
    stub和mock
    软件测试工作经验分享
    类、对象、方法、属性和实例变量
    你真的对 parseInt有足够的了解吗?
    PhoneGap开发环境搭建(记录一下,仅仅针对Android)
    360 前端面试题
    前端WEB开发工程师面试题-基础部分
    有意思的For循环
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5321223.html
Copyright © 2011-2022 走看看