打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
isKindOfClass isMemberOfClass的区别

这两个方法常常会困惑我们,它们有什么区别呢?

定义

首先,我们来看看它们的定义。

 

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类的成员


看了这两个例子,应该就会明白了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
isMemberOfClass和isKindOfClass
【OC底层】isMemberOfClass、isKindOfClass原理分析
iOS中百度地图API的总结
ios自动释放池
iPhone开发之SQLite
NSDate NSCalendar(日历立法) NSDateComponents(日期组件)的一些用法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服