首页 > 代码库 > IOS RunLoop浅析 一
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
IOS RunLoop浅析 一
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。