我如何检查客观c对象?

时间:2010-08-30 00:35:17

标签: objective-c syntax

在红宝石中,我可以从一个物体中去了解细节。我如何在目标c中做类似的事情?谢谢。

5 个答案:

答案 0 :(得分:5)

-[NSObject description]提供了一个对象的基本描述(类似于Java中的toString - 我真的不知道Ruby中的.inspect。在description中打印对象时会自动调用NSLog。(例如NSLog(@"@%", myObject))。

对于其他内省方法,我建议查看NSObject参考。您可以使用the Objective-C runtime直接执行许多操作。

答案 1 :(得分:5)

如果您只是想要打印某些内容,可以使用之前说过的description

我自己不是Ruby人,但如果我理解这一点,Ruby中的.inspect会打印出一个对象的所有实例变量。这不是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

答案 2 :(得分:2)

只需使用NSLog打印出来

NSLog(@"%@", myObject);

它会自动调用对象的description方法。如果这是您创建的类,您将需要定义它(使用信息返回NSString)。

看看this question

答案 3 :(得分:1)

NSObject的描述方法类似于inspect

答案 4 :(得分:1)

在你的NSObject的h文件中写下这个:

  
      
  • (NSDictionary *)dictionaryRepresentation;
  •   

在你的NSObject的m文件中写下:

  
      
  • (NSDictionary *)dictionaryRepresentation {   unsigned int count = 0;   //获取班级中所有属性的列表。   objc_property_t * properties = class_copyPropertyList([self class],&amp; count);

         

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

         

    for(int i = 0; i&lt; count; i ++){       NSString * key = [NSString stringWithUTF8String:property_getName(properties [i])];       NSString * value = [self valueForKey:key];

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

    }

         

    自由(属性);

         

    返回字典; }

  •   
  • (NSString *)description {   return [NSString stringWithFormat:@“%@”,[self dictionaryRepresentation]]; }

  •