官方文檔:
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. (required)
isMemberOfClass
Returns a Boolean value that indicates whether the receiver is an instance of a given class. (required)
相同點:
都是NSObject的比較Class的方法
不同點:
1. isKindOfClass是確定一個對象是否是一個類的成員,或者是派生自該類的成員。
2. isMemberOfClass只能確定一個對象是否是一個類的的成員。
特殊情況:
官方文檔
Be careful when using this method on objects represented by a class cluster. Because of the nature of class clusters, the object you get back may not always be the type you expected. If you call a method that returns a class cluster, the exact type returned by the method is the best indicator of what you can do with that object. For example, if a method returns a pointer to an NSArray object, you should not use this method to see if the array is mutable, as shown in the following code:
// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]]) {
// Modify the object
}
If you use such constructs in your code, you might think it is alright to modify an object that in reality should not be modified. Doing so might then create problems for other code that expected the object to remain unchanged.
If the receiver is a class object, this method returns YES if aClass is a Class object of the same type, NO otherwise.
測試如下
測試如下
NSArray*myArr = [[NSArrayalloc] init];
NSMutableArray*myArr2 = [[NSMutableArrayalloc] init];
if([myArr isKindOfClass:[NSArrayclass]]) {
NSlog(@"myArr isKindOfClass of NSArray");}
if([myArr isMemberOfClass:[NSArrayclass]]) {
NSlog(@"myArr isMemberOfClass of NSArray");
}
if([myArr2 isKindOfClass:[NSMutableArrayclass]]) {
NSlog(@"myArr2 isKindOfClass of NSMutableArray");}
if([myArr2 isMemberOfClass:[NSMutableArrayclass]]) {
NSlog(@"myArr2 isMemberOfClass of NSMutableArray");
}
輸出結(jié)果:
myArr isKindOfClass ofNSArray
myArr2 isKindOfClass ofNSMutableArray
總結(jié)如下:
1、NSArray择浊、NSMutableArray屬于類簇,使用isMemberOfClass不能得到正確的結(jié)果,因為由于類簇的性質(zhì)氛谜,這類對象實際返回的實例有不確定性。
2区端、對于類簇的判斷要謹慎值漫。