关注this question,更具体地说,this comment:
因为在定时器的目标也是其所有者
的常见情况下,保留(又称强引用)循环
我想知道为什么dealloc
不是使NSTimer
无效的好地方。
我记得在不自动重复NSTimer
失效的情况下分析我的应用,然后在dealloc
中失效,并正确释放内存。
dealloc
在最新的iOS中有不同的工作方式吗?
事实上,在任何dealloc
重新分配之前,您是否已被覆盖NSObject
?那么dealloc
甚至用于什么?如果不手动取消分配相应对象的属性?
答案 0 :(得分:1)
当只有dealloc
个引用指向此对象(没有人保留)时,ARC才会释放(并调用strong
)个对象。
NSTimer
创建strong
引用,它将保留target
。
这意味着,dealloc
将不会被调用,因为NSTimer仍然具有strong
对象的引用。如果没有dealloc
,则表示NSTimer
永远不会失效...导致内存泄漏甚至崩溃。
在invalidate
或[{1}}成为零时,dealloc
计时器有办法。看看answer here。