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;
}

results matching ""

    No results matching ""