2010-06-07 57 views
3

我剛剛從2010年1月在線觀看斯坦福iPhone講座,我注意到蘋果的這個人一直提到使用「className」獲取對象類名,例如className方法?

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

但是,我不能得到這個工作,最接近我能想出它使用類,類名是錯誤的,並得到它刪除,只是好奇?

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

加里

回答

12

className方法僅適用於Mac OS X中可用,而不是的iPhoneOS。它通常用於腳本支持,這就是爲什麼它不存在於iPhone上。你可以使用類似的東西:

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

如果你想存儲字符串。 NSStringFromClass()並不是絕對必要的,但你應該使用它,因爲它是「記錄」的方式來做事情。

+0

之前謝謝,我更好奇,因爲它一直得到提到,然而,當我在一個基本的iPhone應用程序我得到一個錯誤試了一下,我看什麼正在發生。 – fuzzygoat 2010-06-07 16:38:24

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方法。

0
NSStringFromClass([someObject class]); 

和Objective-C 2.0

someObject->isa.name