OC block 原理总结

2020-11-03  本文已影响0人  赵邦华

本文重点总结 OC block 的原理,并带上一些例子,不讨论 block 的写法和应用。

block 的本质总结如下:

void (^ blk)(void) = ^{
  NSLog(@"hello");
};

NSLog(@"%@", [blk class]);  // __NSGlobalBlock__
NSLog(@"%@", [[blk class] superclass]);  // __NSGlobalBlock
NSLog(@"%@", [[[blk class] superclass] superclass]);  // NSBlock
NSLog(@"%@", [[[[blk class] superclass] superclass] superclass]);  // NSObject
// 不使用外部变量
NSLog(@"%@", [^{
  NSLog(@"globalBlock");
} class]);  // __NSGlobalBlock__

// 使用外部变量并且未进行copy
NSInteger num = 10;
NSLog(@"%@", [^{
  NSLog(@"stackBlock:%zd", num);
} class]);  // __NSStackBlock__

// 对全局block进行copy
void (^ globalBlock)(void) = [^{
  NSLog(@"globalBlock");
} copy];
NSLog(@"%@", [globalBlock class]);  //  __NSGlobalBlock__

// 对栈block进行copy操作
void (^ mallocBlock)(void) = [^{
  NSLog(@"stackBlock:%zd", num);
} copy];
NSLog(@"%@", [mallocBlock class]);  //  __NSMallocBlock__
上一篇下一篇

猜你喜欢

热点阅读