iOS中的一些内存问题,block,NSTimer,dealloc

作为一个固守于不用ARC的人,一直对于内存管理比较纠结。

    今天又遇到了。在Block中和NSTimer下,发现一些VC不再执行dealloc。


总结:


  1.   在block内中,使用self或者类的成员变量,会导致self的引用计数被加1,引起循环引用,导致无法释放当前的self。

   如下,

iOS中的一些内存问题,block,NSTimer,dealloc_第1张图片

mMatchHead是我自定义的一个在VC中贴入的view,用了2个block来进行回调。

在withMinuteFinish:这个block中,出现了2个问题,导致循环引用。


第一个就是一眼看见的self,block中直接使用self是不对的。

第二个是,使用了currentScore,这个成员变量,即使不加self.xx,也会导致self引用计数被加1.

所以,解决方法是,

iOS中的一些内存问题,block,NSTimer,dealloc_第2张图片

用bself的__block变量来代替。请对比上线两张图。self 和currentScore的改变。


2.第二个是,在程序内使用定时器,也会引起当前的对象被应用计数加1,无法到达dealloc来释放。

解决方法是,在

iOS中的一些内存问题,block,NSTimer,dealloc_第3张图片

viewWillDisappear中暂停以及失效所有定时器。


你可能感兴趣的:(iOS中的一些内存问题,block,NSTimer,dealloc)