0
코드 :ARC를 사용하는 Objective-C에서 블록을 정의 할 때 컴파일러는 무엇을합니까?
X의 위치를 스택에 비원 호에
__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);
: 0xbfffdba0
X의 위치는 스택이다 0xbfffdba0
X의 위치를 스택에 : 0xbfffdba0
x의 위치는 힙에 있습니다. 0x7195860
:
X의 위치는 스택이다 0xbfffdb70
X의 위치를 스택에
: 0xbfffdb70
X의 위치를 스택에
: 0xbfffdb70
X의 위치 힙에 있습니다 : 0x7195860
왜 differenc 전자는 호와 비 호를 출력합니까?
유일한 차이점은 실행할 때마다 다를 수있는 스택의 메모리 주소입니다. –
이것은 다음 질문과 매우 유사합니다. http://stackoverflow.com/questions/15082265/why-is-a-block-variable-is- 블럭이 복사되기 전에 힙으로 옮겨졌다. –
@MartinR 동일합니다. @ Nikolai Ruhe의 대답을 얻었습니다. – gelosie