링크 된 질문에 대한 대답의 코드를 사용하면 디버깅하는 동안 언제든지 호출 할 수 있도록 편리한 방법으로 래핑하면됩니다. 귀하의 장소에서 NSObject을 확장하는 범주를 작성하고 NSDictionary 및 모든 ivars를 반환하는 메서드를 추가하십시오. 직접적 또는 간접적으로 에서 NSObject의 상속하는 경우 방금 사전이 메서드에서 반환 인쇄해야, 유형을 모르고있는 객체 주어진 다음
- (NSDictionary*) ivars
{
NSMutableDictionary* ivarsDict=[NSMutableDictionary new];
unsigned int count;
Ivar* ivars=class_copyIvarList([self class], &count);
for(int i=0; i<count; i++)
{
Ivar ivar= ivars[i];
const char* name = ivar_getName(ivar);
const char* typeEncoding = ivar_getTypeEncoding(ivar);
[ivarsDict setObject: [NSString stringWithFormat: @"%s",typeEncoding] forKey: [NSString stringWithFormat: @"%s",name]];
}
free(ivars);
return ivarsDict;
}
:
다음은 예입니다
(lldb) po [someObject ivars]
크레딧 : How do I list all fields of an object in Objective-C?
추신 : 당신은 objc/runtime.h을 가져와야합니다.
네, 아주 좋습니다! 추가 정보 : 알 수없는 객체 ivars (개인 Apple 객체라고 가정)에 대한 정보를 인쇄하려면 ivars를 포함하여 해당 클래스에 대한 가짜 헤더를 만들어야합니다. 그렇지 않으면 lldb가 오류를 줄 것입니다. 고마워요! – LombaX
+1, 멋지고 자세한 답변. – Maroun