问计划从大连到长白山自驾游,有哪些路线和攻略可以推荐?
-
嘻嘻
一、什么是nstimer
官方给出解释是“a timer provides a way to perform a delayed action or a periodic action.the timer waits until a certain time interval has elapsed and then fires,sending a specified ** to a specified object.”翻译过来就是timer就是一个能在从现在开始的后面的某一个时刻或者周期性的执行我们指定的方法的对象。二、nstimer和它调用的函数对象间到底发生了什么
从前面官方给出的解释可以看出timer会在未来的某个时刻执行一次或者多次我们指定的方法,这也就牵扯出一个问题,如何保证timer在未来的某个时刻触发指定事件的时候,我们指定的方法是有效的呢?解决方法很简单,只要将指定给timer的方法的接收者retain一份就搞定了,实际上系统也是这样做的。不管是重复性的timer还是一次性的timer都会对它的方法的接收者进行retain,这两种timer的区别在于“一次性的timer在完成调用以后会自动将自己invalidate,而重复的timer则将永生,直到你显示的invalidate它为止”。三、nstimer会是准时触发事件吗
答案是否定的,而且有时候你会发现实际的触发时间跟你想象的差距还比较大。nstimer不是一个实时系统,因此不管是一次性的还是周期性的,timer的实际触发事件的时间可能都会跟我们预想的会有出入。差距的大小跟当前我们程序的执行情况有关系,比如可能程序是多线程的,而你的timer只是添加在某一个线程的runloop的某一种指定的runloopmode中,由于多线程通常都是分时执行的,而且每次执行的mode也可能随着实际情况发生变化。假设你添加了一个timer指定2秒后触发某一个事件,但是签好那个时候当前线程在执行一个连续运算(例如大数据块的处理等),这个时候timer就会延迟到该连续运算执行完以后才会执行。重复性的timer遇到这种情况,如果延迟超过了一个周期,则会和后面的触发进行合并,即在一个周期内只会触发一次。但是不管该timer的触发时间延迟的有多离谱,他后面的timer的触发时间总是倍数于第一次添加timer的间隙。原文如下“a repeating timer reschedules itself based on the scheduled firing time,not the actual firing time.for example,if a timer ** scheduled to fire at a particular time and every 5 seconds after that,the scheduled firing time will always fall on the original 5 second time intervals,even if the actual firing time gets delayed.if the firing time ** delayed so far that it passes one or of the scheduled firing times,the timer ** fired only once for that time period;the timer ** then rescheduled,after firing,for the next scheduled firing time in the future.”
四、nstimer为什么要添加到runloop中才会有作用
前面的例子中我们使用的是一种便利方法,它其实是做了两件事:首先创建一个timer,然后将该timer添加到当前runloop的default mode中。也就是这个便利方法给我们造成了只要创建了timer就可以生效的错觉,我们当然可以自己创建timer,然后手动的把它添加到指定runloop的指定mode中去。nstimer其实也是一种资源,如果看过多线程编程指引文档的话,我们会发现所有的source如果要起作用,就得加到runloop中去。同理timer这种资源要想起作用,那肯定也需要加到runloop中才会生效喽。如果一个runloop里面不包含任何资源的话,运行该runloop时会立马退出。你可能会说那我们app的主线程的runloop我们没有往其中添加任何资源,为什么它还好好的运行。我们不添加,不代表框架没有添加,如果有兴趣的话你可以打印一下main thread的runloop,你会发现有很多资源。五、nstimer加到了runloop中但迟迟的不触发事件
为什么明明添加了,但是就是不按照预先的逻辑触发事件呢?原因主要有以下两个:
1、runloop是否运行
每一个线程都有它自己的runloop,程序的主线程会自动的使runloop生效,但对于我们自己新建的线程,它的runloop是不会自己运行起来,当我们需要使用它的runloop时,就得自己启动。2、mode是否正确
我们前面自己动手添加runloop的时候,可以看到有一个参数runloopmode,这个参数是干嘛的呢?前面提到了要想timer生效,我们就得把它添加到指定runloop的指定mode中去,通常是主线程的de**t mode。但有时我们这样做了,却仍然发现timer还是没有触发事件。这是为什么呢?这是因为timer添加的时候,我们需要指定一个mode,因为同一线程的runloop在运行的时候,任意时刻只能处于一种mode。所以只能当程序处于这种mode的时候,timer才能得到触发事件的机会。
-
问 舟山三日游,自驾游攻略有哪些?
提问时间:2024-05-03 16:16:50
答 三天到舟山旅游真的很紧张,舟山有千岛之市的美誉,来这里主要是海岛游,岛与岛之间是靠船摆渡,而且,由于班次和天气等原因,会让你的自驾不能随心所欲!小编按多年经验安...
-
问 自驾去**,有哪些线路可以选择?
提问时间:2024-05-03 10:20:52
答 1、318川藏线(风景最美、最安全)318川藏线是**最长国道g318中的一部分,起点成都,沿途经过新都桥、康定、理塘、林芝等地,终点****。在所有入藏线路中...
-
问 从成都去四姑娘山,有哪些自驾路线、攻略可以推荐?
提问时间:2024-05-03 09:48:40
答 四姑娘山位于四川小金县与汶川县交界处,由四座长年被冰雪覆盖的山峰组成,四姑娘山被列为我国十大登山名山之一。四姑娘山由四座连绵不断的山峰组成,它们从北到南分别为四...
-
问 准备自驾游从西安出发,有哪些值得旅行的路线和攻略推荐?
提问时间:2024-05-03 13:04:31
答 这几年去了周边的省份,跑的不算太多,穷游谈不上,该住酒店住酒店,一天保证一顿四菜一汤正餐,有过赶路,有过自然醒,有过半夜冻醒,有过风景如画,回想起来最美好的就是...
-
问 从绵阳出发自驾到防城港怎样规划线路?
提问时间:2024-05-03 03:24:46
答 绵阳自驾防城港,单程最短距离约1400公里,但是既然是自驾游,最理想的莫过于沿途一路走一路游了,所以好好规划一条线路,既保证沿途景点丰富又做到来回不走或少走回头...
-
问 从天津自驾到黄山往返游玩攻略有哪些?
提问时间:2024-05-03 20:50:32
答 天津自驾游黄山,可选的线路有多条,可以往返走环线,这样在黄山周边各景点之间也比较合理,比如下面这条参考线路:天津—黄骅—沧县—乐陵—济南—曲阜—微山湖—徐州东—...
-
问 从天津自驾游到承德,3-4天,有什么攻略可以推荐吗?
提问时间:2024-05-03 10:03:20
答 从天津自驾游到承德,3-4天,有什么攻略可以推荐吗?从天津自驾游到承德,一种是玩着走,一种是直接到承德。我先说一下玩着走的话,我个人建议是第一天一早出发直奔蓟县...
-
问 从郑州到**自驾游25天,重点去北疆和喀什,有哪些好的路线和景点可以推荐?
提问时间:2024-05-03 14:12:36
答 谢谢邀请,本人秦皇岛自驾北疆南疆才回来,郑州自驾**南疆二十五日的安排,俺给你提供一下俺自驾游朋友的线路,他郑州出发南北疆穿越的路线,仅供参考,如有需要私信我,...
-
问 从大连出发到上海自驾游路线,怎么走最合适?
提问时间:2024-05-03 22:06:36
答 十一假期刚自驾去的上海-乌镇-杭州-南京-青岛。从烟大火车轮渡出发的,车550人180(三等舱),上海推荐去城隍庙、南京路逛逛,在上海待了两天,高架桥太多,一定...
-
问 西安到青海自驾游5天左右,有哪些路线可以推荐?有哪些旅游攻略可以推荐?
提问时间:2024-05-03 09:05:35
答 五天时间确实有些紧,去年七月底去,由于带孩子自驾,所以行程安排不是很紧,但是依旧累!第一天:西安到兰州,夜宿兰州!第二天:兰州到青海湖,夜宿青海湖边黑马河镇!第...