2012-09-26 3 views
0

UIViewController의 기본 설명에있는 숫자 값은 무엇입니까? 나는 그것이 인스턴스 주소, 혹은 해시 될 것으로 예상했지만, 나는이 이론을 테스트 할 때이 내가 가진 것입니다 : 내가 UIViewController에 나에 대한 참조에 대한 설명을 찾을 수 없어UIViewController의 기본 설명

NSLog(@"Self [%@]", self); 
NSLog(@"Address [%p]", &self); 
NSLog(@"Hash [%d]", [self hash]); 

2012-09-26 10:28:00.202 QuickList7[85957:c07] Self [<SelectCategoryViewController: 0xa42fc60>] 
2012-09-26 10:28:00.202 QuickList7[85957:c07] Address [0xbfffdea8] 
2012-09-26 10:28:00.203 QuickList7[85957:c07] Hash [172162144] 

그것은 슈퍼 클래스 다 - 누구라도 알고 있냐?

+6

두 번째 줄에는 포인터의 주소 (포인터 포인터)가 나타납니다. 앰퍼샌드없이'self'를 전달해보십시오. – Eimantas

답변

2

실제로는 NSOBject의 기본 구현을 사용하는 다른 description 구현의 경우와 마찬가지로 인스턴스 주소입니다.

selfUIViewController*이고 인스턴스 주소는 이미 self 변수에 있으며 이미 포인터입니다. 예제에서와 같이 &self의 포인터 값을 인쇄하면 포인터의 주소가 아닌 &self이 실제로 UIViewController** 인 인스턴스 주소가 아닌 포인터의 주소가 인쇄됩니다.

NSLog(@"%p", &self) 대신 NSLog(@"%p", self)을 사용하면 description에 사용되는 것과 같은 주소가 인쇄되고 NSLog(@"%@", self)으로 표시됩니다.

1

인스턴스 주소입니다. 두 번째 줄에서는 스택에있는 포인터의 주소를 인쇄하고 있습니다 (주소가 0xbfff 인 이유입니다). 인스턴스 포인터 자체가 아닙니다. NSLog(@"%p", self);은 인 개체로 self을 인쇄 할 때 표시되는 것과 동일한 값을 표시합니다.

관련 문제