博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS runloop与定时器的使用
阅读量:2202 次
发布时间:2019-05-03

本文共 1507 字,大约阅读时间需要 5 分钟。

runloop有五种工作模式

其中较为常用的是以下三种

kCFRunLoopDefaultMode--默认模式

UITrackingRunLoopMode--界面跟踪模式

NSRunLoopCommonModes --占位模式

每当用户拖拽界面时,runloop就会由默认模式,进入界面跟踪模式。

所以在设置NSTimer,工作在runloop的mode时要注意实际应用场景。

每种模式下都有如下触发源

定时器是其中一种触发源,所以定时器的使用必须结合runloop工作模式的设置

下面是runloop下使用NSTimer的几种方式

// 0.没有设置runloop模式的方式    //    [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(show) userInfo:nil repeats:YES];        // 1.创建NSTimer    NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(show) userInfo:nil repeats:YES];        // 2.1.添加到runloop    // 把定时器添加到当前的runloop中,并选择默认运行模式    // kCFRunLoopDefaultMode == NSDefaultRunLoopMode    // 但是这种模式下如果拖拽界面,runloop会自动进入UITrackingMode,优先于定时器追踪模式    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];        // 2.2.我们更改一下模式UITrackingRunLoopMode    // 当runloop的模式是UITrackingRunLoopMode时定时器才工作    [[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];        // 2.3.还有一种runloop的mode,占位运行模式    // 就可以无论是界面追踪还是普通模式都可以运行    /**     common modes = 
{type = mutable set, count = 2, entries => 0 :
{contents = "UITrackingRunLoopMode"} 2 :
{contents = "kCFRunLoopDefaultMode"} */ /** NSTimer的问题,NSTimer是runloop的一个触发源,由于NSTimer是添加到runloop中使用的,所以如果只添加到default模式,会导致拖拽界面的时候runloop进入界面跟踪模式而定时器暂停运行,不拖拽又恢复的问题,这时候就应该使用runloop的NSRunLoopCommonModes模式,能够让定时器在runloop两种模式切换时也不受影响。 */ [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

你可能感兴趣的文章
mark一下,service的实现层没有加@service注解。
查看>>
jq对象转换成js对象。已经jq的复合选择器。
查看>>
(一)alin‘s mysql学习笔记----概述
查看>>
(二)alin’s mysql学习笔记----mysql的存储引擎
查看>>
(三)alin’s mysql学习笔记----常用的join连接查询
查看>>
(四)alin’s mysql学习笔记----索引简介
查看>>
分布式系统中的幂等性的理解
查看>>
spring的注解开发中的常用注解(一)------@bean @Configuration @ComponentScan @Import @Scope @Lazy
查看>>
(五)alin’s mysql学习笔记----索引性能分析
查看>>
Spring中使用@Transactional注解进行事务管理的时候只有应用到 public 方法才有效
查看>>
springboot整合rabbitmq及rabbitmq的简单入门
查看>>
mysql事务和隔离级别笔记
查看>>
事务的传播属性(有坑点)自调用失效学习笔记
查看>>
REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案
查看>>
动态代理实现AOP
查看>>
23种常见的java设计模式
查看>>
关于被final修饰的基本数据类型一些注意事项
查看>>
java Thread中,run方法和start方法的区别
查看>>
在 XML 中有 5 个预定义的实体引用
查看>>
XML 元素是可扩展的
查看>>