[pop后不走dealloc 再push进来会走一次dealloc]问题记录

controller 不能释放,不走dealloc方法的4种可能

以上基本记录了Pop返回之后,不执行Dealloc

的几个原因

1. controller中使用了计时器 NSTimer 使用后没有销毁 导致循环引用

//记得用完要释放
[_playerTimerinvalidate];
    _playerTimer =nil;

2.协议delegate 应该使用weak修饰,否则会引起循环引用 不能释放内存

@property (nonatomic,weak)id<yourDelegate>delegate;

3. block强引用了!

__weaktypeof(self) weakSelf =self;
    _audioStream.onCompletion=^(){
        [weakSelf nextButtonAction];
    };

4.pop后不走dealloc 再push进来会走一次dealloc

对于这种情况,一个可能就是

@interfaceViewController (){
    ceshiViewController *ceshiVC;// 使用实例变量声明的时候,,我是不怎么这样写
}

说下我的情况

 [SDRequestHelp shareSDRequest].controller = self;

我单例引用了当前的VC,单例没有释放,自然一直引用着我赋值传入的 self ,其效果等同于 ceshiViewController *ceshiVC

解决办法就是

在生命周期消失时,

[SDRequestHelp shareSDRequest].controller = nil;

清掉引用即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值