2010-12-16 4 views
1

NSObject 파생 개체에 대한 Objective-C 설명 메서드를 구현하려고합니다.Objective-C 설명 메서드에서 설명 이름의 ivar을 사용할 수 없습니까?

그러나 파생 된 개체에는 이름 설명이있는 ivar이 있습니다. 그리고 어떤 이유로이 사고가 발생하고 있습니다.

- (NSString *) description { 

    NSMutableString *output = [NSMutableString string]; 
    [output appendFormat:@"MyObject.description = %@\n", self.description]; 

    return output; 
} 

왜 이것이 문제가됩니까?

답변

5

짧은 답변 : 당신의 -description 방법은 반복적으로 자신을 호출하기 때문에 충돌이 스택 오버 플로우의 결과이다. 당신이하고 싶은 일을하기 위해서 (설명 방법 내에서 ivar에 접근하기 위해) 이 아니라은 ivar 앞에 접두어 self.을 사용해야합니다.

더 상세 : 오브젝티브 C에서

, self.description[self description] 속기이다. 도트 구문을 사용하면 컴파일러에 description이라는 속성에 액세스하고 이 아니라 ivar 자체에 액세스하려는 것으로 알립니다.

+0

감사합니다. 나는 바보 같은 짓을한다는 것을 알고있었습니다. – Shiun

+0

'this'? 당신이 '자기'를 의미한다고 생각하십니까 ;-) (this is the C++ equiv, sorta). nm, 너는 그것을 고쳤다. – NSGod

+0

@NSGod : 이미 수정되었지만 지적 해 주셔서 감사합니다. 나는 그 실수를 항상한다. 나는 C++로 이빨을 자르므로'자동으로 튀어 나와':)' –

1

무한 루프를 생성하기 때문에 문제가됩니다. self.description은 [자기 설명]을 호출합니다. 이는 정확히 사용자가 속한 방법입니다. 따라서 반복적으로 호출하는 메서드가 있습니다.

- (NSString *) description { 

    NSMutableString *output = [NSMutableString string]; 
    [output appendFormat:@"super's description = %@\n", [super description]]; 
    [output appendFormat:@"MyObject.description = %@\n", description]; 

    return output; 
} 

self.description을 사용하지 않고 인스턴스 변수에 직접 액세스 할 수 있습니다. 또한 추가 선을 추가하여 super의 설명 메서드 (무한 루프를 생성하지 않음)를 호출하는 방법을 보여줍니다.

+0

고마워! 그것이 문제이다. – Shiun

+0

+1 나에게서. '[super description]'에 대한 좋은 지적 –