2010-08-30 2 views
6

В рубине я могу. Инспектировать объект, чтобы узнать подробности. Как я могу сделать подобное в объективном c? Спасибо.Как проверить объективный объект c?

+0

Каков реальный вопрос? этот один или тот http://stackoverflow.com/questions/3597186/how-can-i-inspect-an-objective-c-object, в любом случае спам с дубликатами нахмурился ... – t0mm13b

+0

@ tommieb75: с учетом одинаковые сроки и содержание сообщений, я бы сказал, что это была простая ошибка с двойной отправкой. –

+0

Извините, я думаю, что моя сеть нестабильна, поэтому она публикует два вопроса. – Tattat

ответ

5

Если вы просто хотите что-то для печати можно использовать description как было сказано ранее.

Я сам не парень-рубин, но если я правильно понял, тов Ruby печатает все переменные экземпляра объекта. Это не что-то встроенное в Cocoa. Если вам это нужно, вы можете использовать систему времени выполнения для запроса этой информации.

Вот быстрая категория я соединял, который делает это:

#import <objc/objc-class.h> 

@interface NSObject (InspectAsInRuby) 

- (NSString *) inspect; 

@end 

@implementation NSObject (InspectAsInRuby) 

- (NSString *) inspect; 
{ 
    NSMutableString *result = [NSMutableString stringWithFormat: @"<%@:%p", NSStringFromClass([self class]), self ]; 

    unsigned ivarCount = 0; 
    Ivar *ivarList = class_copyIvarList([self class], &ivarCount); 

    for (unsigned i = 0; i < ivarCount; i++) { 
     NSString *varName = [NSString stringWithUTF8String: ivar_getName(ivarList[i])]; 
     [result appendFormat: @" %@=%@", varName, [self valueForKey: varName]]; 
    } 

    [result appendString: @">"]; 

    free(ivarList); 

    return result; 
} 

@end 
+0

Этот метод не будет отображать какие-либо исполняемые файлы или частные iVars. – Berik

5

-[NSObject description] содержит базовое описание объекта (аналогично toString на Java - я действительно не знаю о .inspect в Ruby). description автоматически вызывается при печати объекта в NSLog (например, NSLog(@"@%", myObject)).

Для других методов самоанализа я бы предложил посмотреть ссылку NSObject. Есть также много вещей, которые вы можете сделать непосредственно с the Objective-C runtime.

2

Просто распечатайте его с NSLog

NSLog(@"%@", myObject); 

Он будет автоматически вызывать description метод объекта. Если это класс, который вы создали, вам нужно будет определить, что (верните NSString с информацией).

Посмотрите на this question.

1

В вашем файле ч NSObject пишет это:

  • (NSDictionary *) dictionaryRepresentation;

В вашем файле м NSObject пишут это:

  • (NSDictionary *) dictionaryRepresentation { неподписанных INT кол = 0; // Получить список всех свойств в классе. objc_property_t * properties = class_copyPropertyList ([self class], & count);

    NSMutableDictionary * dictionary = [[NSMutableDictionary alloc] initWithCapacity: count];

    для (INT I = 0; я < рассчитывать; я ++) { NSString * ключ = [NSString stringWithUTF8String: property_getName (свойства [I])]; NSString * value = [self valueForKey: key];

    // Only add to the NSDictionary if it's not nil. 
    if (value) 
        [dictionary setObject:value forKey:key]; 
    

    }

    свободные (свойства);

    словарь о возврате; }

  • (NSString *) описание { return [NSString stringWithFormat: @ "% @", [self dictionaryRepresentation]]; }