[Objective-C] isKindOfClass 和 class 方法

原创 2015年07月09日 11:52:38

参考:

https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/index.html#//apple_ref/occ/intfm/NSObject/isKindOfClass:


Objc 中,isKindOfClass 方法原型如下。输入 Class 类型参数,返回 BOOL 类型值

- (BOOL)isKindOfClass:(Class)aClass


示例代码如下:

// ===== Person.h =====

@interface Person: NSObject
@end

// ===== Student.h =====

#import "Person.h"

@interface Student: Person
@end

// ===== main.m =====

#import "Person.h"
#import "Student.h"

int main(int argc, const char * argv[]) {
	@autoreleasepool {
		Student* s = [[Student alloc] init];
		NSLog(@"%hhd", [s isKindOfClass:[Student class]]);
		NSLog(@"%hhd", [s isKindOfClass:[Person class]]);
		NSLog(@"%hhd", [s isKindOfClass:@"Student"]);
		NSLog(@"%hhd", [s isKindOfClass:[NSString class]]);
		NSLog(@"%@", [Student class]);
		NSLog(@"%hhd", [Student isKindOfClass:[Person class]]);
	}
	return 0;
}

运行结果:

> 1
> 1
> 0
> 0
> Student
> 0

说明:

1) 下面函数原型中的”Class“相当于是一种 Object 类型,虽然上面代码中的 NSLog(@"%@", [Student class]); 打印出”Student“,但 Student class 返回的并不是 NSString,而是 Class 类型的object

- (BOOL)isKindOfClass:(Class)aClass

2) 像下面这样对 isKindOfClass 直接传入字符串,不能正确判断一个对象是否是该字符串对应类或其子类的对象

[s isKindOfClass:@"Student"];
3) [Student isKindOfClass:[Person class]] 并没有像我们想象的那样返回1,而是返回0。然而,[s isKindOfClass:[Person class]] 是返回1的。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Objective-C学习-区别方法isKindOfClass、isMemberOfClass和isSubclassOfClass

今天突然被问到isKindOfClass,isMemberOfClass的区别,瞬间懵了,虽然是知道根据类的名称判断是否属于这个类,但没有具体的了解,总归问到的时候不能回答 用的时候看心情,就区别了一...

Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等

对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。 判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -...

Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等

对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。 判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -...

8、Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等

对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。 判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -...

Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等

对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。 判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -...

iOS Objective-C语法(isKindOfClass, isMemberOfClass,id)等

对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。 判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -...

Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等

对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。 判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -...

Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等

对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。 判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -...

objective-C中的扩展方法与partial class

在c#中要扩展一个现有类很容易,比如这样: ? 1 2 3 4 5 6 7 public static class Utils {     public st...

[Objective-C]Class类型、class方法

Class类型    到目前为止,我们已经知道了对应于方法的SEL数据类型,和SEL同样在Objective-C里面我们不仅仅可以使用对应于方法的SEL,对于类在Objective-C也为我们准...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)