[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的。


IOS网络——检测网络状态:Reachability

IOS网络——检测网络状态:Reachability
  • ppdyhappy
  • ppdyhappy
  • 2016年06月12日 21:00
  • 2915

iOS-Objective-C的属性修饰符

在苹果引入了ARC之后,属性的也相对应的增加了一些修饰符。所以这里我们分别对MRC和ARC两种情况下的属性修饰符进行学习。其实主要的区别集中在对对象生命周期进行描述的属性修饰符会有所区别而已。...
  • linyousong
  • linyousong
  • 2016年02月28日 22:26
  • 1583

Objective-C method及相关方法分析

method及相关方法分析 转载请注名出处 http://blog.csdn.net/uxyheaven 本篇文章将探究一下objc里的关于方法的函数是如何实现的 首先看下方法的定义, Method...
  • uxyheaven
  • uxyheaven
  • 2014年10月21日 20:41
  • 10302

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

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

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

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

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

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

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

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

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

在c#中要扩展一个现有类很容易,比如这样: ? 1 2 3 4 5 6 7 public static class Utils {     public st...
  • gyz413977349
  • gyz413977349
  • 2014年08月01日 11:11
  • 643

Objective-C头文件导出工具class-dump

  • 2013年06月06日 09:37
  • 265KB
  • 下载

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

Class类型    到目前为止,我们已经知道了对应于方法的SEL数据类型,和SEL同样在Objective-C里面我们不仅仅可以使用对应于方法的SEL,对于类在Objective-C也为我们准...
  • onlyou930
  • onlyou930
  • 2012年03月19日 14:27
  • 9168
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Objective-C] isKindOfClass 和 class 方法
举报原因:
原因补充:

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