ios - 在 dealloc 中使 NSTimer 失效

标签 ios cocoa-touch memory-management nstimer dealloc

已关注 this question ,更具体地说,this comment :

because retain (aka strong reference) cycles in the common case where the timer's target is also its owner

我想知道为什么 dealloc 不是使 NSTimer 失效的好地方。

我记得在分析我的应用程序时没有自动重复 NSTimer 失效,然后在 dealloc 中失效,并且正确释放了内存。

在最新的 iOS 中,dealloc 的工作方式是否有所不同?

实际上,您的重写的 dealloc 不是在任何 NSObject 释放之前调用吗?那么,dealloc 到底有什么用呢?如果不手动释放相应对象的属性?

最佳答案

当没有引用指向该对象(没有人保留)时,ARC只会释放(并调用dealloc)对象。

NSTimer 创建strong 引用,并将保留target

这意味着,dealloc 将不会被调用,因为 NSTimer 仍然具有对该对象的strong 引用。如果没有dealloc,这意味着NSTimer永远不会失效……导致内存泄漏甚至崩溃。

有一种方法可以在 dealloc 中或当 target 变为 nil 时使计时器无效。看看answer here .

关于ios - 在 dealloc 中使 NSTimer 失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40358646/

相关文章:

ios - 我怎么知道何时可以安全地重用来自另一个进程的后台 NSURLSessionConfiguration id?

ios - 随机生成的CGGradient不会显示

ios - UIImage不释放内存

c++ - 在 32 位 XP 上分配超过 1 GB 的内存

ios - 移动 map View 相机时更新纬度和经度?

objective-c - 跟踪杂志的自动续订订阅

objective-c - UIScrollView 移除 subview 动画

iphone - Objective-C 中的自定义对象初始化

cocoa-touch - CALayer的动画结束回调?

c++ - 修改编译后的可执行内存分配