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

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

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


总结:


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

   如下,

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

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


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

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

所以,解决方法是,

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


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

解决方法是,在

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值