className方法?

时间:2010-06-07 16:17:31

标签: ios iphone objective-c cocoa-touch

我从2010年1月开始在线观看斯坦福iPhone的讲座,我注意到Apple的家伙一直指的是使用“className”获取对象类名称,例如。

NSArray *myArray = [NSArray arrayWithObjects:@"ONE", @"TWO", nil];
NSLog(@"I am an %@ and have %d items", [myArray className], [myArray count]);

然而,我无法让这个工作,最接近我能用它来使用类,className错了,它被删除了,只是好奇吗?

NSArray *myArray = [NSArray arrayWithObjects:@"ONE", @"TWO", nil];
NSLog(@"I am an %@ and have %d items", [myArray class], [myArray count]);

加里

3 个答案:

答案 0 :(得分:12)

className方法仅适用于Mac OS X,不适用于iPhoneOS。它通常用于脚本支持,这就是它在iPhone上不存在的原因。你可以使用类似的东西:

NSString* className = NSStringFromClass([myArray class]);

如果要存储字符串。 NSStringFromClass()并非绝对必要,但您应该使用它,因为它是“记录”的做事方式。

答案 1 :(得分:2)

className方法仅存在于Mac上。但是,通过NSObject类别实现iPhone相当容易:

//NSObject+ClassName.h
@interface NSObject (ClassName)

- (NSString *) className;

@end

//NSObject+ClassName.m
@implementation NSObject (ClassName)

- (NSString *) className {
  return NSStringFromClass([self class]);
}

@end

现在,应用程序中的每个NSObject(和子类)都有className方法。

答案 2 :(得分:0)

NSStringFromClass( [someObject class] );

在Objective-C 2.0之前

someObject->isa.name