isKindOfClass和isMemberOfClass

2016-09-02  本文已影响0人  不许看我哼

- 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.

Discussion

For example, in this code, isKindOfClass: would return YES because, in Foundation, the NSArchiver class inherits from NSCoder:

NSMutableData *myData = [NSMutableData dataWithCapacity:30];

id anArchiver = [[NSArchiver alloc] initForWritingWithMutableData:myData];

if ( [anArchiver isKindOfClass:[NSCoder class]] )

...

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.

- isMemberOfClass:

仅用以判断某个对象是不是给出类的实例对象。

Returns a Boolean value that indicates whether the receiver is an instance of a given class.

Discussion

For example, in this code, isMemberOfClass: would return NO:

NSMutableData *myData = [NSMutableData dataWithCapacity:30];

id anArchiver = [[NSArchiver alloc] initForWritingWithMutableData:myData];

if ([anArchiver isMemberOfClass:[NSCoder class]])

...

Class objects may be compiler-created objects but they still support the concept of membership. Thus, you can use this method to verify that the receiver is a specific Class object.

上一篇下一篇

猜你喜欢

热点阅读