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;