美文网首页
NSTimer invaildate

NSTimer invaildate

作者: 小白猿 | 来源:发表于2019-04-03 12:52 被阅读0次
NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)self));

_timer = [NSTimer scheduledTimerWithTimeInterval:TimerInterval
target:self
selector:@selector(timerSelector:)
userInfo:nil
repeats:TimerRepeats];

NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)self));

[_timer invalidate];

NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)self));

######  输出为  ####
2016-07-06 13:53:21.950 NSTimerAndDeallocDemo[2028:697020] Retain count is 7
2016-07-06 13:53:21.950 NSTimerAndDeallocDemo[2028:697020] Retain count is 8
2016-07-06 13:53:21.950 NSTimerAndDeallocDemo[2028:697020] Retain count is 7

timer对viewController进行了强调应用,原因是因为,如果要让timer运行的时候执行viewController下面的timerSelector:,timer需要知道target,并且保存这个target,以便于在以后执行这个代码 [target performSelector:], 这里的target就是指viewController。所以,timer和viewController是相互强调引用的。 但是这样看起来,就形成了retain cycle。为了解除retain cycle,我觉得,在-(void)invalidate;这个方法下,timer之前保存的target被设置为nil,强制断开了引用环。这点和设置timer = nil是差不多的。 但是invalidate还做了另外一个动作,就是解除了runloop对timer的强调引用,使得timer成功停止。

相关文章

  • NSTimer invaildate

    timer对viewController进行了强调应用,原因是因为,如果要让timer运行的时候执行viewCon...

  • iOS中的计时器

    一、NSTimer 创建方法 1 NSTimer *timer = [NSTimer scheduledTimer...

  • NSTimer

    创建NSTimer 创建NSTimer的常用方法是: + (NSTimer *)scheduledTimerWit...

  • iOS 延时

    1 NSTimer //1秒后执行 NSTimer *timer = [NSTimer timerWithTim...

  • iOS 获取网络流量

    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:...

  • 时间倒计时

    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:...

  • 1.4NSTimer

    NSTimer NSTimer.png

  • NSRunloop跟NSTimer

    NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval...

  • iOS-NSTimer 使用

    1.NSTimer的创建方法 2. NStimer的开启 3. NStimer的停止 4. NStimer的其他属...

  • 定时器操作NSTimer

    NSTimer * timer;timer = [NSTimer scheduledTimerWithTimeIn...

网友评论

      本文标题:NSTimer invaildate

      本文链接:https://www.haomeiwen.com/subject/tswabqtx.html