zoukankan      html  css  js  c++  java
  • IOS RunLoop浅析 一

    RunLoop犹如其名循环。

    RunLoop 中有多重模式。

    在一个“时刻”只能值执行一种模式。

    因此在使用RunLoop时要注意所实现的效果有可能不是你想要的。

    在这里用NSTimer展示一下Runloop的简单实现。

    在故事板中添加一个TextView(用于测试)

     

    我们吧nstimer加入到NSDefaultRunLoopMode模式中

     

    在上面我们可以很清晰的看到,当我们滚动TextView的时候,nstimer不在执行。

    //
    //  ViewController.m
    //  CX RunLoop浅析
    //
    //  Created by ma c on 16/3/29.
    //  Copyright © 2016年 xubaoaichiyu. All rights reserved.
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
    }
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        NSTimer * timer = [NSTimer timerWithTimeInterval:3 target:self selector:@selector(test) userInfo:nil repeats:YES];
        //添加到默认的runloop中
        [[NSRunLoop mainRunLoop]addTimer:timer forMode:NSDefaultRunLoopMode];
        
        [timer fire];
    }
                           
    -(void)test{
    
        NSLog(@"旭宝爱吃鱼");
        
    }
    
    @end

    我们吧nstimer加入到UITrackingRunLoopMode模式中

     

    在上面我们可以很清晰的看到,当我们滚动TextView的时候,nstimer执行。

    //
    //  ViewController.m
    //  CX RunLoop浅析
    //
    //  Created by ma c on 16/3/29.
    //  Copyright © 2016年 xubaoaichiyu. All rights reserved.
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
    }
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        NSTimer * timer = [NSTimer timerWithTimeInterval:3 target:self selector:@selector(test) userInfo:nil repeats:YES];
        //添加到默认的runloop中
        [[NSRunLoop currentRunLoop]addTimer:timer forMode:UITrackingRunLoopMode];
        
        [timer fire];
    }
                           
    -(void)test{
    
        NSLog(@"旭宝爱吃鱼");
        
    }
    
    @end

    我们吧nstimer加入到NSRunLoopCommonModes模式中

     

    在上面我们可以很清晰的看到,当我们滚动与不滚动TextView的时候,nstimer都执行。

    //
    //  ViewController.m
    //  CX RunLoop浅析
    //
    //  Created by ma c on 16/3/29.
    //  Copyright © 2016年 xubaoaichiyu. All rights reserved.
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
    }
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        NSTimer * timer = [NSTimer timerWithTimeInterval:3 target:self selector:@selector(test) userInfo:nil repeats:YES];
        //添加到默认的runloop中
        [[NSRunLoop currentRunLoop]addTimer:timer forMode:NSRunLoopCommonModes];
        
        [timer fire];
    }
                           
    -(void)test{
    
        NSLog(@"旭宝爱吃鱼");
        
    }
    
    @end

    NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(test) userInfo:nil repeats:YES];

    自动添加到runloop 并且默认为NSDefaultRunLoopMode.

    但是我们可以通过与上面相同的方法改变模式。

    //
    //  ViewController.m
    //  CX RunLoop浅析
    //
    //  Created by ma c on 16/3/29.
    //  Copyright © 2016年 xubaoaichiyu. All rights reserved.
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
    }
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(test) userInfo:nil repeats:YES];
    }
                           
    -(void)test{
     
        NSLog(@"旭宝爱吃鱼");
        
    }
    
    @end
  • 相关阅读:
    R语言nest_join()函数
    R语言行/列合并
    ffmpeg 命令将视频转化为图帧
    Natas Wargame Level20 Writeup(会话状态注入/篡改)
    vim简明教程--半小时从入门到精通
    笔记:Spring Cloud Hystrix 异常处理、缓存和请求合并
    【Ecstore2.0】导出问题解决(未导出或导出文件为0字节)
    Android Handler消息处理顺序分析
    着色器语言之变量类型
    Redis源码分析(十一)--- memtest内存检测
  • 原文地址:https://www.cnblogs.com/xubaoaichiyu/p/5335152.html
Copyright © 2011-2022 走看看