0

コード:

__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

円弧と非円弧で異なる出力を取得するのはなぜですか?

4

1 に答える 1

3

ARCのドキュメントを参照してください:

[...] これらのセマンティクスがブロック ポインター型の値を保持することを要求するときはいつでも、Block_copy の効果があります [...]

于 2013-02-26T13:04:17.100 に答える