请教一个问题 日语isKindOfClass的问题

iOS中isKindOfClass和isMemberOfClass的区别 - 简书
iOS中isKindOfClass和isMemberOfClass的区别
都是NSObject的比较Class的方法.不同点:
isKindOfClass:确定一个对象是否是一个类的成员,或者是派生自该类的成员.
isMemberOfClass:确定一个对象是否是当前类的成员.
做任何事,怕,就会输一辈子!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.
& & & (返回一个布尔值,指示是否接收给定类或其他类继承的类的实例的实例。)
&& & & @: isMemberOfClass
&& & & Returns a Boolean value that indicates whether the receiver is an instance of a given class.
& & & (返回一个布尔值,指示是否接收某个类的一个实例。)
&& & & 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& | & + (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]&
相比似乎高大上了许多
-(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网站的观点或立场
访问:94603次
排名:千里之外
评论: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'oc中iskindofClass怎么用? - 知乎3被浏览1588分享邀请回答13 条评论分享收藏感谢收起0添加评论分享收藏感谢收起iskindofclass和ismemberofclass比较一个对象是否是类的成员及区别
isMemberOfClass和isKindOfClass之间区别是:我们可以使用isKindOfClass来确定一个对象是否是一个类的成员,或者是派生自该类的成员。
例如:我们已经成NSObject派生了自己的类,isMemberOfClass不能检测任何的类都是基于NSObject类这一事实,而isKindOfClass可以。
[[NSMutableData data] isKindOfClass:[NSData class]]; //
[[NSMutableData data] isMemberOfClass:[NSData class]]; //
例子1如下:
int main (int argc, const
char * argv[]) {
& & // insert
code here...
Class1 *c1=[Class1
if ([c1 isKindOfClass:
[NSObject class]]==YES)
printf("c1 is a kind of
NSObject . \n");
& & return
输出结果;
c1 is a kind of NSObject .
例子2如下:
int main (int argc, const
char * argv[]) {
& & // insert
code here...
Class1 *c1=[Class1
Class2 *c2=[Class2 new];
isMemberOfClass:[Class1
class]]==YES) {
printf("c1 is Member of
Class1 !\n\n");
isMemberOfClass:[Class2
class]]==YES) {
printf("c2 is Member of
Class2 !\n\n");
& & return
输出结果:
c1 is Member of Class1 &!
c2 is Member of Class2 &!
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 请教一个cxf问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信