iOS-NSTimer-pause-暂停-引用循环

NSTimer,是个有爱有恨的类,用起来方便,但是随随便便就可能引用循环了,内存泄露自然不用说了;

怎么方便的使用NStimer,这里小小的总结了下,写的不对的欢迎指出。

首先是习惯问题,为了防止写错,我一般会把NSTimer相关的封到单独的函数里面。

如下:

- (void)initTimer
{
    if(_timer)
    {
        [self clearTimer];
    }
    _timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(test) userInfo:nil repeats:YES];
}
- (void)clearTimer
{
    [_timer finalize];
    _timer = nil;
}
- (void)test
{
    NSLog(@"Timer!");
}

还有就是,可以尝试一次初始化,一直使用,直到dealloc释放,所以就需要暂停了

方法如下:

- (void)stratAnimationTimer
{
    [_animationTimer setFireDate:[NSDate date]];
}
- (void)pauseAnimationTimer
{
    [_animationTimer setFireDate:[NSDate distantFuture]];
}

设置触发时间[NSDate distantFuture],就暂停了,怎么暂停的呢,触发时间distantFuture,不懂自己翻译去~~~

怎么开始?[NSDate date],立刻触发就好了!

时间: 2024-10-12 02:17:25

iOS-NSTimer-pause-暂停-引用循环的相关文章

ios animation的暂停pause、恢复resume

项目中要用到动画的控制,比如说暂停.恢复继续等,先看代码:(很容易实现) -(void)pauseLayer:(CALayer*)layer { CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; layer.speed = 0.0; layer.timeOffset = pausedTime; } -(void)resumeLayer:(CALayer*)layer { CFTi

iOS开发笔记15:地图坐标转换那些事、block引用循环、UICollectionviewLayout及瀑布流、图层混合

1.地图坐标转换那些事 (1)投影坐标系与地理坐标系 地理坐标系使用三维球面来定义地球上的位置,单位即经纬度.但经纬度无法精确测量距离戒面积,也难以在平面地图戒计算机屏幕上显示数据.通过投影的方式可以将其转换成平面的投影坐标系,不同的投影方式可能会带来不同的变形及误差,类似于把一个橘子的橘子皮剥开摊平到桌面. GPS以及iOS系统定位获得的坐标是地理坐标系WGS1984,Web地图一般用的坐标细是投影坐标系WGS 1984 Web Mercator,国内出于相关法律法规要求,对国内所有GPS设备

NSTimer单循环和多循环定时器讲解

本文将通过一个简单例子介绍一下NSTimer单循环和多循环定时器的使用方法. 创建一个Xcode工程,页面比较简单: 左侧部分实现了单循环定时器的创建.暂停.开启和停止功能,而右侧部分是多循环定时器的实现. 1.单循环定时器 定义定时器: NSTimer *singleCycleTimer; // 单循环定时器 功能实现: /* 创建单循环定时器 响应页面里"单循环"按钮 */ - (IBAction)createSingleCycleTimer:(id)sender { // 注:创

Xcode8的调试技能Memory Graph 实战解决闭包引用循环问题

Xcode8的调试技能又增加了一个黑科技:Memory Graph.简单的说就是可以在运行时将内存中的对象生成一张图. 那么通过一个实际项目来练习一下吧. 首先我们写了一个自定义UIView:MyView.初始化的时候接收一个没有参数也没有返回值的闭包作为参数,并存为自己的属性: typealias Action = () -> Void class MyView: UIView { var action: Action? init(action: @escaping Action) { sel

iOS关于使用for in循环删除数组元素报错

原文链接: iOS关于使用for in循环删除数组元素报错 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://github.com/MajorLMJ iOS开发者公会-技术1群 QQ群号:87440292 iOS开发者公会-技术2群 QQ群号:232702419 iOS开发者公会-议事区   QQ群号:413102158

转:Block原理及引用循环问题

2010年WWDC发布iOS4时Apple对Objective-C进行了一次重要的升级:支持Block.说到底这东西就是闭包,其他高级语音例如Java和C++已有支持,第一次使用Block感觉满简单好用的,但是慢慢也遇到很多坑.本文聊聊ARC和non-ARC下Block使用中的引用循环问题,最近遇到了好几次这种问题,还是深入记录下.先来套题目热热身,貌似能够全部答对的人蛮少的 Block实现原理 首先探究下Block的实现原理,由于Objective-C是C语言的超集,既然OC中的NSObjec

reference cycle 引用循环

在swift 里引用循环的造成,主要有两个方法, 1.类之间的引用 2.clourse 闭包引用 解决办法: weak references and unowned references. 也就是weak,unowned weak, 来修饰可选的,? 结尾的,如:var weak city: String ? unowned 来修身 一直存在的. var unowned city: String class Person { letname: String init(name:String) {

(转)NSTimer 怎么暂停继续

NSTimer 怎么暂停继续 转载自:http://blog.csdn.net/chentoo/article/details/8667918 那,API里面NSTimer 是木有暂停继续的方法的,只有fire和invalidate,前者是开工的意思,后者是废掉的意思,如果用废掉来代替暂停的功能?显然是不对的. 那肿么办呢?其实NSTimer 有一个属性叫 fireDate ,啥意思呢?fireDate么,就是fire 的开始时间所以我们就有了思路了. 暂停: [timer setFireDat

iOS视图更新与事件循环

iOS使用的是事件循环+标志更新(视图)机制. The View Drawing Cycle The UIView class uses an on-demand drawing model for presenting content. When a view first appears on the screen, the system asks it to draw its content. The system captures a snapshot of this content an