(一)isKindOfClass和isMemberOfClass 都是NSObject的比較Class的方法
但兩個有很大區別:
isKindOfClass來確定一個對象是否是一個類的成員,或者是派生自該類的成員(類)
isMemberOfClass只能確定一個對象是否是當前類的成員(成員)
(二)例如:
我們已經成NSObject派生了自己的類,isMemberOfClass不能檢測任何的類都是基于NSObject類這一事實,而isKindOfClass可以。
[[NSMutableData data] isKindOfClass:[NSData class]]; // YES(可以判斷是否繼承于這個類)
[[NSMutableData data] isMemberOfClass:[NSData class]]; // NO(不可以判斷是否繼承于這個類)
(三)例如:
假設這里有兩個類,分別是:繼承于NSObject的Person,繼承于Person的Teacher。
isKindOfClass :只要是子類或者此類
isMemberOfClass:確定為唯一的當前對象。
#import@interface Person : NSObject
{
NSString *name;
}
-(void)setName:(NSString*)n;
@end
#import "Person.h"
@implementation Person
-(void)setName:(NSString *)n
{
name = n;
}
@end
#import "Person.h"
@interface Teacher : Person
-(void)teach;
@end
#import "Teacher.h"
@implementation Teacher
-(void)teach
{
NSLog(@"我教數學");
}
@end
使用isKindOfClass的例子:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Person *person = [[Person alloc] init];
Teacher *teacher = [[Teacher alloc] init];
//YES
if ([teacher isKindOfClass:[Teacher class]]) {
NSLog(@"teacher 是 Teacher類或Teacher的子類");
}
//YES
if ([teacher isKindOfClass:[Person class]]) {
NSLog(@"teacher 是 Person類或Person的子類");
}
//YES
if ([teacher isKindOfClass:[NSObject class]]) {
NSLog(@"teacher 是 NSObject類或NSObject的子類");
}
[person release];
[teacher release];
[pool release];
輸出結果:
2012-07-04 14:34:17.315 ObjectiveCTest[2595:f803] teacher 是 Teacher類或Teacher的子類
2012-07-04 14:34:17.316 ObjectiveCTest[2595:f803] teacher 是 Person類或Person的子類
2012-07-04 14:34:17.316 ObjectiveCTest[2595:f803] teacher 是 NSObject類或NSObject的子類
使用isMemberOfClass的例子:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Person *person = [[Person alloc] init];
Teacher *teacher = [[Teacher alloc] init];
//YES
if ([teacher isMemberOfClass:[Teacher class]]) {
NSLog(@"teacher Teacher類的成員");
}
//NO
if ([teacher isMemberOfClass:[Person class]]) {
NSLog(@"teacher Person類的成員");
}
//NO
if ([teacher isMemberOfClass:[NSObject class]]) {
NSLog(@"teacher NSObject類的成員");
}
[person release];
[teacher release];
[pool release];
輸出結果:
2012-07-04 14:23:07.965 ObjectiveCTest[2460:f803] teacher Teacher類的成員
(四)追加:
-(BOOL) isKindOfClass: classObj 判斷是否是這個類,包括這個類的子類和父類的實例;
-(BOOL) isMemberOfClass: classObj 判斷是否是這個類的實例,不包括子類或者父類;