block的内存管理

  • block的内存默认放在栈中,(开发人员不需要管理block内存),block所引用的对象的retainCount不变;
    Block_copy(block);

  • 对bloc进行了copy操作,block的内存会搬到堆里面,block所引用的对象retainCount+1;
    Block_release(block);

  • 对block进行了release操作之后,block所引用的对象retainCount不变;

  • 1.默认情况下,block的内存是在栈中,它不会对所引用的对象进行任何操作

  • 2.如果对block做一次copy操作,block的内存就会在堆中

    • 2.1 它会对所引用对象做一次retain操作,retainCount+1
      MRC:使用__block修饰所引用的对象,block就不会做retain操作
      ARC:使用__unsafe_unretained或__weak修饰所引用的对象,block就不会做retain操作
    • 2.2 使用assign(nonatomic, assign)修饰block,block的内存放在栈中;
    • 2.3 一般使用copy(nonatomic, copy)修饰block,block的内存放在堆中。
@property (nonatomic, copy) void (^block))();
- (void)dealloc {
Block_release(block);
[super dealloc];
}

你可能感兴趣的:(block的内存管理)