请教一个cxf问题isKindOfClass的问题

匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&iOS开发 - isKindOfClass,isSubclassOfClass和isMembe... - 简书
iOS开发 - isKindOfClass,isSubclassOfClass和isMemberOfClass
在iOS开发中,会遇到需要判断一个对象是否为某类的对象,或者某个子类的对象.判断方法大体有三个isKindOfClass,isSubclassOfClass和isMemberOfClass.他们的区别是什么呢?下面通过代码来验证一下.
创建父子类关系的类对象
测试1:isKindOfClass
isKindOfClass测试
isKindOfClass测试结果
测试2:isSubclassOfClass
isSubclassOfClass测试
isSubclassOfClass测试结果
测试3:isMemberOfClass
isMemberOfClass测试
结果表明isSubclassOfClass和isKindOfClass的作用基本上是一致都是用来判断一个对象或一个类是否为某个类或者某个类的子类.isMemberOfClass 有所不同,只有当类型完全匹配的时候才会返回YES。
补充:附加测试(isMemberOfClass)
isMemberOfClass附加测试
结果令人意外bool7为假,难道上面得出的结论是错误的么?或者textArr不是 NSArray 类型的?打印了一下textArr 结果发现结果为
textArr类型为NSArray0
原来textArr 不是NSArray类型实例,通过不同方法实例化的array都是NSArray子类的实例,NSArray是一个抽象的基类。这种模式就是了.2943人阅读
Objective-C(12)
& & & & 今天突然被问到isKindOfClass,isMemberOfClass的区别,瞬间懵了,虽然是知道根据类的名称判断是否属于这个类,但没有具体的了解,总归问到的时候不能回答 ”用的时候看心情吧0.0“,就区别了一下,其实也很简单
& & &以下的类层次是这样的,BaseZombie是所有僵尸类的基类,ZombieType1是继承于BaseZombie的一个类,textType是继承于ZomboeType1的类
@interface BaseZombie : NSObject
@interface ZombieType1 : BaseZombie
@interface textType1 : ZombieType1//失误了,记得类名开头大写
& & &首先看一下开发文档中描述isKindOfClass
- (BOOL)isKindOfClass:(Class)aClass
Description
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)
//意思是返回一个BOOL类型的值,表示调用该方法的类 是否是 参数类 或者 继承于参数类
通过程序来反馈下结果会更加的明显,
textType1 * text1 = [[textType1 alloc]init];//初始化一个测试子类
BOOL b1 = [text1 isKindOfClass:[textType1 class]];//YES
BOOL b2 = [text1 isKindOfClass:[ZombieType1 class]];//YES
& & & 接下来看一下开发文档中的描述isMemberOfClass
- (BOOL)isMemberOfClass:(Class)aClass
Description
Returns a Boolean value that indicates whether the receiver is an instance of a given class. (required)
//意思是返回一个BOOL类型的值,表示调用该方法的类 是否是 参数类
通过程序反馈结果如下
BOOL b3 = [text1 isMemberOfClass:[textType1 class]];//YES
BOOL b4 = [text1 isMemberOfClass:[ZombieType1 class]];//NO 父类不被承认
& & & & 最后一个是开发文档中的isSubclassOfClass
//注意这是一个类方法
+ (BOOL)isSubclassOfClass:(Class)aClass
Description
Returns a Boolean value that indicates whether the receiving class is a subclass of, or identical to, a given class.
//意思是返回一个BOOL类型的值,表示调用该方法的类 是不是 参数类的一个子类 或者 是这个类的本身
程序反馈如下
BOOL b5 = [textType1 isSubclassOfClass:[ZombieType1 class]];//YES
BOOL b6 = [textType1 isSubclassOfClass:[textType1 class]];//YES
BOOL b7 = [textType1 isSubclassOfClass:[NSString class]];//NO
& & & &综上看来,isSubclassOfClass和isKindOfClass的作用基本上是一致的,只不过一个是类方法,一个是对象方法。
& & & &isMemberOfClass 筛选条件更为苛刻,只有当类型完全匹配的时候才会返回YES。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:187526次
积分:2488
积分:2488
排名:第15678名
原创:77篇
评论:59条
(1)(1)(2)(3)(4)(1)(2)(8)(7)(5)(7)(3)(4)(10)(16)(7)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'IOS 的基础类(29)
第一:NSobject &类的方法。
& & & & isKindOfClass|isMemberOfClass|conformsToProtocol|respondsToSelector|
methodForSelector等方法都是NSobject类的方法。这些有的是我们常用的、有的也是我们不用的。所以,在一些面试的试题或者口答的时候都会涉到它们的作用和部分之间的区别。
第二:相关代码。
1.主要模块
//& ViewController.m
//& KindClass_Metoh
//& Created by 周双建 on 16/4/7.
//& Copyright (C) 2016年周双建. All rights reserved.
#import &ViewController.h&
#import &MyStr.h&
#import &KProtocol.h&
@interface
ViewController ()&MyDelegate&
@implementation ViewController
- (void)viewDidLoad {
& & [superviewDidLoad];
& & NSString * Str =
@&成功QQ吧&;
& & NSString * Str1 =
@&成功QQ吧&;
&& & * & - (BOOL)isEqualToString:(NSString *)aString& & NSString类的方法
&& & * & - (BOOL)isEqual:(id)object & & & & & & & & & & NSObject类的方法
&& & * & 用于判断一个字符串的实例是否和给定的实例相等,相等返回 YES,否则,返回 NO
& & if ([Str& isEqualToString:@&QQ&]) {
& & if ([Str isEqual:Str1]) {
&& & * & - (BOOL)isKindOfClass:(Class)aClass& & & & & & NSObject类的方法
&& & * & 用于判断一个实例对象是否是某一个类或者类的继承,是返回 YES,否则,返回 NO
& & if ([Str isKindOfClass:[NSStringclass]]) {
& & /*******************************************************************/
&& & * & - (BOOL)isMemberOfClass:(Class)aC
&& & * & 用于判断一个实例对象是否是某一个类,是返回 YES,否则,返回 NO
& & MyStr * Temp_Str = [[MyStralloc]init];
& & if ([Temp_Str
isKindOfClass:[NSString
class]]) {
& & & & NSLog(@&Temp_Str是NSString类的对象实例&);
& & if ([Temp_Str
isKindOfClass:[MyStr
class]]) {
& & & & NSLog(@&Temp_Str是MyStr类的对象实例&);
& & if ([Temp_Str
isMemberOfClass:[NSString
class]]) {
& & & & NSLog(@&Temp_Str不是NSString类&);
& & if ([Temp_Str
isMemberOfClass:[MyStr
class]]) {
& & & & NSLog(@&Temp_Str是MyStr类&);
&& & & 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.
& & & (返回一个布尔&#20540;,指示是否接收给定类或其他类继承的类的实例的实例。)
&& & & @: isMemberOfClass
&& & & Returns a Boolean value that indicates whether the receiver is an instance of a given class.
& & & (返回一个布尔&#20540;,指示是否接收某个类的一个实例。)
&& & & isKindOfClass& & | & isMemberOfClass&
&& & & 1. isKindOfClass
可以用于判断一个类的实例对象是否属于父类还是父类的继承类。
&& & & 2. isMemberOfClass
只可以判断一个类的实例对象是否该类的对象,不可判断对象是否是该类的父类的对象。
& & /*******************************************************************/
&& & *& - (BOOL)conformsToProtocol:(Protocol *)aProtocol
&& & *& 用于检验一个类是否符合某个协议
& & KProtocol * Pl = [[KProtocolalloc]init];
& & if ([PlconformsToProtocol:@protocol(MyDelegate)])
& & & & NSLog(@&PL对象符合 MyDelete协议&);
& & if ([selfconformsToProtocol:@protocol(MyDelegate)])
& & & & NSLog(@&Self对象符合 MyDelete协议&);
& & /*******************************************************************/
&& & *& - (BOOL)respondsToSelector:(SEL)aSelector& | & &#43; (BOOL)instancesRespondToSelector:(SEL)aSelector
&& & *& 用于检测某个类相应的方法是否实现(该方法可以不声明)
& & if ([selfrespondsToSelector:@selector(test)]) {
& & & & NSLog(@&Self对象有 test方法的实现&);
& & if ([selfrespondsToSelector:@selector(eat)]) {
& & & & NSLog(@&Self对象有 eat方法的实现&);
& & if ([KProtocolinstancesRespondToSelector:@selector(mytest)])
& & & & NSLog(@&KProtocol对象有 mytest方法的实现&);
& & [self test];
& & /*******************************************************************/
&& & *& - (IMP)methodForSelector:(SEL)aS
&& & *& 这个方法可以根据一个SEL,得到该方法的IMP(函数指针)
&& & 1. SEL
&& & Objective-C是动态语言,动态体现在可以在运行的时候修改所执行的方法,可以把一个对象的所有方法看成一张表,SEL就可以看成表中每一条的索引,根据方法名来生成对应的SEL,所以OC中不同的方法名就对应不同的方法
&& & 2. IMP
&& & IMP是真正的函数指针,这是其定义
&& & typedef id (*IMP)(id, SEL,... );
&& & 它指向一个真正的函数地址
// 获取一个函数指针
& & IMP ZSJ_IMP = [selfmethodForSelector:@selector(SelSelecd)];
// 我们就可以通过函数指针,直接调用方法
& & ZSJ_IMP();& //
与 [self& SelSelecd]&
相比&#20284;乎高大上了许多
-(void)test{
//& & [self doesNotRecognizeSelector:_cmd];
& & NSLog(@&成功QQ吧&);
-(void)SelSelecd{
& & NSLog(@&成功QQ吧-函数指针&);
- (void)didReceiveMemoryWarning {
& & [superdidReceiveMemoryWarning];
& & // Dispose of any resources that can be recreated.
2.辅助模块一(一个类)
//& Protocol.h
//& KindClass_Metoh
//& Created by 周双建 on 16/4/7.
//& Copyright (C) 2016年周双建. All rights reserved.
#import &Foundation/Foundation.h&
// create one Protocol
@protocol MyDelegate &NSObject&
// 可以实现或者不实现的方法
@interface KProtocol :
//& Protocol.m
//& KindClass_Metoh
//& Created by 周双建 on 16/4/7.
//& Copyright (C) 2016年周双建. All rights reserved.
#import &KProtocol.h&
@implementation KProtocol
-(void)mytest{
3、辅助模块二(一个继承类)
//& MyStr.h
//& KindClass_Metoh
//& Created by 周双建 on 16/4/7.
//& Copyright (C) 2016年周双建. All rights reserved.
#import &Foundation/Foundation.h&
@interface MyStr : NSString
//& MyStr.m
//& KindClass_Metoh
//& Created by 周双建 on 16/4/7.
//& Copyright (C) 2016年周双建. All rights reserved.
#import &MyStr.h&
@implementation MyStr
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:94734次
排名:千里之外
评论:29条
(3)(1)(3)(1)(5)(3)(4)(2)(1)(4)(3)(3)(1)(2)(1)(5)(9)(6)(4)(3)(21)(4)(4)(19)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'

我要回帖

更多关于 哲学的基本问题 的文章

 

随机推荐