ios block 内存管理时使用注意

  
    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---");

 

posted @ 2015-10-10 11:58  吃饭了吗  阅读(193)  评论(0编辑  收藏  举报