对象是不是也持有了nstimer?那为什么nstimer不会强引用对象呢?

来源:6-8 循环引用相关面试问题&面试总结

qq_沩鉨緈諨_0

2018-11-04


我的理解是中间对象只是通过weak指针变为nil这一特性的监测及时销毁了nstimer,但没有解决真正意义上的nstimer对对象的持有,老师不知道我这种理解是否问题?

写回答

1回答

于海

2018-11-04

理解是对的,我们解决循环引用始终围绕两个思路,第一,避免产生环路。第二,在有环路的情况下,找到合适的时机去断开环路。
针对NSTimer的循环引用就是应用了第二种思路,而对于NSTimer本身特殊的地方在于不好找断环的时机,课程中得案例巧妙利用了weak指针得特性,即在对象释放的时候,weak指针会自动被置为nil,这个特点在内存管理章节有针对原理性的详细分析,这里不再赘述。那么在timer的回调当中通过对weak指针是否为空的判断来及早断开环路。

1
2
慕粉2253046915
终于明白了好的书籍为什么要看很多次了,看一次可能只是理解个大概,只是记住了结论,多看几次,反复体会才会明白其中道理.
2019-07-04
共2条回复

资深大牛带你深度剖析ios高级面试

从BAT/TMD名企真题入手,结合源码及应用,构建完整iOS知识体系

1749 学习 · 600 问题

查看课程