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
    复制代码
  • 相关阅读:
    python第三天
    python第二天
    python第一天
    Linux之VIM常用功能
    Linux输入输出管理
    Linux文件操作及管理
    Linux虚拟机基本操作
    JAVA堆,栈的区别,用AarrayList、LinkedList自定义栈
    mysql优化limit
    MySql五大引擎的区别以及优劣之分
  • 原文地址:https://www.cnblogs.com/wuyuxin/p/7045577.html
Copyright © 2011-2022 走看看