StrongSelf

  • weakSelf : 防止循环引用
  • strongSelf: 防止释放 需要 强引用weakSelf,主要是处理一些比较费时的操作

例子:.testBlock 是全局的block

- (void)dealloc {
    
    NSLog(@"VC_dealloc");
}

- (void)test {
    
    /* 运行 在 block 里面的 延时操作 **/
    __weak typeof(self)weakSelf = self;
    
#if 1 // 当控制器 快速点返回后 不会马上调用delloc ,会先调用延时里面的方法,而且self 没有被释放
    self.testBlock = ^(){
        
        __strong typeof(weakSelf) strongSelf = weakSelf;
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            
            NSLog(@"strongSelf = %@",strongSelf);
        });
    };
#else // self 会被马上释放 
    self.testBlock = ^(){
        
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            
            NSLog(@"weakSelf = %@",weakSelf);
        });
    };
#endif
    
    self.testBlock();
}

你可能感兴趣的:(StrongSelf)