这两个方法常常会困惑我们,它们有什么区别呢?
首先,我们来看看它们的定义。
isKindOfClass:
官方解释:Returns a Boolean value that indicates whether the receiver is an instance of given class or an instance of any class that inherits from that class.
isMemberOfClass:
官方解释:Returns a Boolean value that indicates whether the receiver is an instance of a given class.
这里有两个类,分别是继承于NSObject的Person,Person的Teacher
01.
#
import
<Foundation/Foundation.h>
02.
03.
@interface
Person : NSObject
04.
{
05.
NSString *name;
06.
}
07.
-(
void
)setName:(NSString*)n;
08.
09.
@end
10.
11.
12.
#
import
"Person.h"
13.
14.
@implementation
Person
15.
-(
void
)setName:(NSString *)n
16.
{
17.
name = n;
18.
}
19.
20.
@end
01.
#
import
"Person.h"
02.
03.
@interface
Teacher : Person
04.
05.
-(
void
)teach;
06.
07.
@end
08.
09.
#
import
"Teacher.h"
10.
11.
@implementation
Teacher
12.
-(
void
)teach
13.
{
14.
NSLog(@
"我教数学"
);
15.
}
16.
@end
使用isKindOfClass的例子:
01.
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
02.
Person *person = [[Person alloc] init];
03.
Teacher *teacher = [[Teacher alloc] init];
04.
05.
//YES
06.
if
([teacher isKindOfClass:[Teacher
class
]]) {
07.
NSLog(@
"teacher 是 Teacher类或Teacher的子类"
);
08.
}
09.
//YES
10.
if
([teacher isKindOfClass:[Person
class
]]) {
11.
NSLog(@
"teacher 是 Person类或Person的子类"
);
12.
}
13.
//YES
14.
if
([teacher isKindOfClass:[NSObject
class
]]) {
15.
NSLog(@
"teacher 是 NSObject类或NSObject的子类"
);
16.
}
17.
[person release];
18.
[teacher release];
19.
[pool release];
输出结果:
1.
2012-07-04 14:34:17.315 ObjectiveCTest[2595:f803] teacher 是 Teacher类或Teacher的子类
2.
3.
2012-07-04 14:34:17.316 ObjectiveCTest[2595:f803] teacher 是 Person类或Person的子类
4.
5.
2012-07-04 14:34:17.316 ObjectiveCTest[2595:f803] teacher 是 NSObject类或NSObject的子类
使用isMemberOfClass的例子:
01.
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
02.
Person *person = [[Person alloc] init];
03.
Teacher *teacher = [[Teacher alloc] init];
04.
05.
//YES
06.
if
([teacher isMemberOfClass:[Teacher
class
]]) {
07.
NSLog(@
"teacher Teacher类的成员"
);
08.
}
09.
//NO
10.
if
([teacher isMemberOfClass:[Person
class
]]) {
11.
NSLog(@
"teacher Person类的成员"
);
12.
}
13.
//NO
14.
if
([teacher isMemberOfClass:[NSObject
class
]]) {
15.
NSLog(@
"teacher NSObject类的成员"
);
16.
}
17.
[person release];
18.
[teacher release];
19.
[pool release];
输出结果:
2012-07-04 14:23:07.965 ObjectiveCTest[2460:f803] teacher Teacher类的成员
看了这两个例子,应该就会明白了。
联系客服