Invalidating an NSTimer in dealloc

匆匆过客 提交于 2019-12-05 02:58:44

问题


Following this question, and more specifically, this comment:

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

I am wondering why dealloc isn't a good place to invalidate an NSTimer.

I remember profiling my app without auto-repeating NSTimer invalidation and then with invalidation in dealloc, and the memory correctly freed.

Is dealloc working differently in the latest iOS?

Isn't in fact your overridden dealloc called prior to any NSObject deallocation? What is dealloc even used for, then? If not manually deallocating the respective object's properties?


回答1:


ARC will only release ( and call dealloc ) objects, when there are no strong references pointing to this object ( no one is retaining ).

NSTimer creates strong reference and it will retain target.

This means, dealloc will not be called, because NSTimer still has strong reference to the object. If there is no dealloc, this means NSTimer will never be invalidated ... leads to memory leak or even crashes.

There is a way to invalidate timer in dealloc or when target becomes nil. Have a look at the answer here.



来源:https://stackoverflow.com/questions/40358646/invalidating-an-nstimer-in-dealloc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!