我从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]);
加里
答案 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