Objective-C 런타임을 이해하려고하는데 포인터가 가리키는 곳이 self
인 곳을 알아 내지 못합니다. 나는 &self
이 무엇을 보여줄지를 보여주는 예제를 썼다. 주소 및 셀프 포인트?
@implementation ClassA
-(void) print {
NSLog(@"Class A &self is: %p", &self);
}
@end
가 그럼 난
main()
에서
A
의 두 인스턴스를 생성하고 인쇄 할
printf()
전화 : 아래 그림과 같이 나는
ClassA
를 작성했습니다
ClassA *firstInstance = [ClassA new];
[firstInstance print];
ClassA *secondInstance = [ClassA new];
[secondInstance print];
를 그리고 두 경우 모두에 대해 동일한 주소를 얻을 :
Class A &self is: 0x7fff5bacf4e8
Class A &self is: 0x7fff5bacf4e8
은 더욱 나는 다음 코드를 사용하여 두 번째 클래스를 만들 때 :
@implementation ClassA
-(void) print {
NSLog(@"Class B &self is: %p", &self);
}
@end
동일한 주소가 &self
에 있습니다.
Class B &self is: 0x7fff5bacf4e8
왜 항상 &self
은 같은 주소를 가리 킵니까?
이 경우에도 이런 경우가 발생하는 이유는 '-print'_ 실행시 스택의'self '주소를 사용하기 때문입니다. '-print'를 호출하면 스택에 새로운 스택 프레임이 푸시되고, 그 위에'self'가 놓입니다. '& self! = & a! = &b';'a'와'b'는 다른 스택 위치에 있지만'self'도 스택 위치와 별개입니다. 다른 함수 안에서'-print'를 호출했다면,'& self'는 여전히 달라질 것입니다. –
OP가 이것을 원하지 않는다면, 주목할만한 가치가 있는지, 왜 특정한 방식으로 발생하는지, 나도 몰라요. 조금도. ;-) –
물론 교육을 위해서 ... OP가 아닌 사람이이 질문에 비틀 거리고 궁금해 할 수 있습니다. 하지만, 내 의견과 왜 내가 의견이나 편집이나 다른 대답이 아니라 추론을 떠난. :) –