IOSメモリ漏洩防止

613 ワード

  • NSTimer:selfはtimerを持ち、timerは初期化時にselfを持ち、循環参照をもたらす.解決策はdeallocメソッド以外にinvalidateメソッドを用いてtimerを消去することである.
  • - (void)removeFromSuperview //timer  UIView 
    {
        [timer invalidate];
        timer = nil;
    
        [super removeFromSuperview];
    }
    
    - (void)viewDidDisappear:(BOOL)animated // timer in UIViewController
    {
        [self.timer invalidate];
        self.timer = nil;
        
        [super viewDidDisappear:animated];
    }
    
  • block:blockでselfを使用すると、self、blockの相互所有になり、解放できません.解決策は、blockでselfの弱い参照を使用することです.
  • __weak typeof(self) weakSelf = self;