Block的思考
第一题:
// MRC模式下,dispatch_async API Block内的block为什么会变成__NSMallocBlock__?
int main(int argc, const char * argv[]) {
@autoreleasepool {
int a = 10;
void(^block) (void) = ^{
NSLog(@"%d", a);
};
NSLog(@"<1>%@", block);
dispatch_queue_t queue = dispatch_queue_create("queue", NULL);
dispatch_async(queue, ^{
block();
NSLog(@"<2>%@", block);
});
}
return 0;
}
第二题:
// ARC模式下,在dispatch_async API Block中的block为什么还是__NSStackBlock__?
int main(int argc, const char * argv[]) {
@autoreleasepool {
int a = 10;
__weak void(^block) (void) = ^{
NSLog(@"%d", a);
};
NSLog(@"<1>%@", block);
dispatch_queue_t queue = dispatch_queue_create("queue", NULL);
dispatch_async(queue, ^{
block();
NSLog(@"<2>%@", block);
});
}
return 0;
}
第三题:
// ARC模式下,在dispatch_async API Block中的block为什么是__NSMallocBlock__?
int main(int argc, const char * argv[]) {
@autoreleasepool {
int a = 10;
__weak void(^block) (void) = ^{
NSLog(@"%d", a);
};
NSLog(@"<1>%@", block);
dispatch_queue_t queue = dispatch_queue_create("queue", NULL);
dispatch_async(queue, block);
}
return 0;
}