Dealloc 在什么情况下不会被调用呢?

前言: 一般我们在Viewcontroller 里面添加通知的时候 一般我们都会在Dealloc 中去 移除 通知中心 因为在iPhone7 之后 系统添加了可以左滑的手势效果,所以说当我们滑动手机的时候就会走viewWillDisappear 但是如果不POP去前一个页面 在回到当前页面 通知已经被移除了,因此 我们习惯性写在Dealloc 中. 在大家开发中会有dealloc不执行的情况
场景一:我们在使用NStimer的时候 如果不写
[self.timer invalidate];
self.timer = nil;  

会造成Dealloc 不执行.

- (void)dealloc{
  NSLog(@"释放了---");
}
-  (void)viewDidLoad {
    [super viewDidLoad];
    NSTimer \*timer =   [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(test111) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop]addTimer:timer forMode:NSDefaultRunLoopMode];
    self.timer = timer;
}
 - (void)test111{    
 }
场景二: 我们常用的block,如果在使用过程中忘记弱引用会造成循环引用,
- (void)dealloc{
    NSLog(@"释放了");
 }
- (void)viewDidLoad {
    [super viewDidLoad];
    __weak firstViewController \*temp = self;
    self.bbb = ^ {
       NSLog(@"%lu",(unsigned long)temp.view.subviews.count);
    };
 }
场景三:当我们在viewcontroller中使用自定义view,不手动释放的时候也会存在dealloc不执行的情况
关于定时器等对象释放,我们可以放在didMoveToParentViewController方法中去调用、
didMoveToParentViewController 不管是手势左滑、还是点击返回都执行

建议页面调用dealloc,检查对象是否释放。防止内存泄漏

你可能感兴趣的:(Dealloc 在什么情况下不会被调用呢?)