NSLog와 함께 사용하기 위해“toString ()”과 동일한 Objective-C는 무엇입니까?


170

사용자 정의 클래스에서 재정의 할 수있는 방법이 있습니까?

      NSLog(@"%@", myObject) 

호출되면 객체의 필드 (또는 내가 중요하다고 생각하는 것)를 인쇄합니까? Java의 Objective-C와 동등한 것을 찾고 있다고 생각 toString()합니다.

답변:


250

다음 description과 같이 선언 된 인스턴스 메소드입니다.

- (NSString *)description

다음은 구현 예입니다 (grahamparks 덕분에).

- (NSString *)description {
   return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}

5
CoreData를 사용하는 경우 description속성 이 예약되어 있으며 유용한 디버깅 정보를 제공합니다! 이 경우 고유 한 분석법 이름을 사용해야합니다.
Nuthatch

가요 debugDescription도 예약? DebugDescriptionLLDB와 같은 디버거에서 사용해야한다고 생각 합니다.
MaddTheSane

36

이것을 @implementation포토 클래스에 추가하십시오 .

- (NSString *)description {
   return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}

24

NSObject의 설명 메소드를 대체 할 수 있습니다.

- (NSString *)description

로깅의 주제에 대해서는 Objective-C에서 더 나은 로깅을 위해이 블로그 게시물 을 추천합니다 .


4
이것이 정적 방법이 아닙니까? 클래스가 아닌 객체에서 작동하고 싶습니다. 예를 들어, "name"및 "author"필드가있는 "Photo"클래스가있는 경우 NSLog가 해당 필드가 개체에 할당 된대로 인쇄하도록합니다.
조지 암 홀드

2
예-잘 발견되었습니다-잘못된 키를 눌렀습니다. 답을 읽는 증거가 될 때 분명히 더 많은주의를 기울여야합니다. 고맙게도 누군가가 공을
쳐다 보았습니다

13

사용할 수있는 두 가지 기능이 있습니다.

- (NSString*)description

객체를 IE 매개 변수로 배치하면 표시됩니다 NSLog. 다른 설명 기능은 다음과 같습니다.

- (NSString*)debugDescription

po anInstanceOfYourClass디버그 명령 창에서 할 때 호출됩니다 . 클래스에 debugDescription함수 가 없으면 description호출됩니다.

기본 클래스 NSObjectdescription구현되었지만 상당히 중요합니다. 개체의 주소 만 표시합니다. 그렇기 때문에 description특히 description코드 에서 메소드 를 사용하는 경우 정보를 얻으려는 클래스에서 구현하는 것이 좋습니다 . description코드에서 사용하는 경우 구현 debugDescription하는 debugDescription것이 좋으며 더 자세하게 작성하는 것이 좋습니다 .


1

사용 가능한 음성이 출력됩니다.

    NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.