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
  • 相关阅读:
    php面试专题---16、MySQL创建高性能索引考点
    php面试专题---Mysql索引类型、介绍及优点
    php面试专题---Mysql索引原理及SQL优化
    北风设计模式课程---责任链模式 总结
    黑马lavarel教程---2、获取用户输入
    php面试专题---15、MySQL数据库基础考察点
    北风设计模式课程---外观模式、代理模式和中介者模式的区别
    legend3---1、meedu安装
    mysql中utf8和utf8mb4区别
    Struts2基于注解的Action配置
  • 原文地址:https://www.cnblogs.com/xubaoaichiyu/p/5335152.html
Copyright © 2011-2022 走看看