block有3种类型,可以通过调用class方法或者isa指针查看具体类型,最终都是继承自NSBlock类型
所有的block都是继承自NSBlock, NSBlock继承自NSObject
所以block本质上就是一个OC对象
__NSGlobalBlock__ : __NSGlobalBlock : NSBlock : NSObject
__NSStackBlock__ : __NSStackBlock : NSBlock : NSObject
__NSMallocBlock__ : __NSMallocBlock : NSBlock : NSObject
Block类型代码示例
void (^block1) (int,NSString *) = ^(int a,NSString *name){
};
NSLog(@"\nblock1的类型:\n%@\n%@\n%@\n%@",
[block1 class],
[[block1 class] superclass],
[[[block1 class] superclass] superclass],
[[[[block1 class] superclass] superclass] superclass]);
int age = 10;
void (^block2) (void) = ^{
int age1 = age;
};
NSLog(@"\nblock2的类型:\n%@\n%@\n%@\n%@",
[block2 class],
[[block2 class] superclass],
[[[block2 class] superclass] superclass],
[[[[block2 class] superclass] superclass] superclass]);
NSLog(@"\nblock2进行copy操作后的类型:\n%@\n%@\n%@\n%@",
[[block2 copy] class