コード:
__block int x = 0;
int *pointerToX = &x;
NSLog(@"x's location is on the stack: %p", &x); //stack
int (^block)() = ^{
x += 1;
return x;
};
NSLog(@"x's location is on the %@: %p", (&x == pointerToX ? @"stack" : @"heap"), &x);
block();
NSLog(@"x's location is on the %@: %p", (&x == pointerToX ? @"stack" : @"heap"), &x);
block = [block copy];
NSLog(@"x's location is on the %@: %p", (&x == pointerToX ? @"stack" : @"heap"), &x);
非円弧で
x の場所はスタック上にあります:0xbfffdba0
x の場所はスタック上にあります:0xbfffdba0
x の場所はスタック上にあります:0xbfffdba0
x の場所はヒープ上にあります:0x7195860
円弧:
x の場所はスタック上にあります:0xbfffdb70
x の場所はスタック上にあります:0xbfffdb70
x の場所はスタック上にあります:0xbfffdb70
x の場所はヒープ上にあります:0x7195860
円弧と非円弧で異なる出力を取得するのはなぜですか?