Talk is cheap. Show me the code.
先来测试一个经典的案例:
12345678
int age = 10;void (^block)(void) = ^{ NSLog(@"--- age = %d", age);}; age = 20;block();/// 输出结果 --- age = 10
阅读全文
block 的类型有3中,可以通过调用 class 方法或者 isa 指针查看具体类型,最终都是集成子 NSBlock 类型
block 类型的具体类型区分:
为了保证 block 内部能够正常访问外部变量,block 有个变量捕获机制:
最近在做业务时,可谓一步一个坑,所以回过头来补充下最基础的原理知识。PS:基础好才是真的好!!!
不平凡的2018,很无奈的换了四份工作,最近也在想原因,总结如下:
测试
测试代码:
123456789
int main(int argc, const char * argv[]) { @autoreleasepool { void (^block)(void) = ^{ NSLog(@"block1234"); }; block(); } return 0;}
先来看一下测试:
void (^block1)(void) = ^{ NSLog(@"block1--- %d %d %d", age, height, weight);}; NSLog(@"%@ %@ %@ %@", [block1 class], [[block1 class] superclass], [[[block1 class] superclass] superclass], [[[[block1 class] superclass] superclass] superclass]);打印结果:__NSMallocBlock__ __NSMallocBlock NSBlock NSObject