zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

ios block 内存管理时使用注意

ios内存 管理 注意 Block 使用
2023-09-11 14:17:18 时间
  
    XMGStudent *stu = [[XMGStudent alloc] init];
    __weak XMGStudent *weakStu = stu;
    
    
      stu.block = ^{
        NSLog(@"begin - block");
        XMGStudent *strongStu = weakStu;
        
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            
            [strongStu study];
        });
    };
    stu.block();
    
    /*
     1.默认情况下, block是放在栈里面的
     2.一旦block进行了copy操作, block的内存就会放在堆里面
     3.堆里面的block(被copy过的block)有以下现象
     1> block内部如果通过外面声明的强引用来使用某个对象, 那么block内部会自动额外产生一个强引用指向所使用的对象
     2> block内部如果通过外面声明的弱引用来使用某个对象, 那么block内部会自动额外产生一个弱引用指向所使用的对象
     */
    NSLog(@"----over---");