---------------
FKEatable.h
---------------
#import
<Foundation/Foundation.h>
@protocol
FKEatable
@optional
- ( void ) taste;
@optional
- ( void ) taste;
@end
---------------
FKApple.h
---------------
#import
"FKEatable.h"
@interface FKApple : NSObject < FKEatable >
@interface FKApple : NSObject < FKEatable >
@end
---------------
FKApple.m
---------------
#import
"FKApple.h"
@implementation FKApple
@implementation FKApple
@end
---------------
main.m
---------------
#import
<Foundation/Foundation.h>
#import
"FKApple.h"
int
main()
{
FKApple * app = [[ FKApple alloc ] init ];
NSLog ( @"%@" , [app class ]);
NSLog ( @"app 是否为 FKApple 的实例: %d" , [app isMemberOfClass : FKApple . class ]);
NSLog ( @"app 是否为 NSObject 的实例: %d" ,[app isMemberOfClass : NSObject . class ]);
NSLog ( @"app 是否为 FKApple 及其子类的实例: %d" ,[app isKindOfClass : FKApple . class ]);
NSLog ( @"app 是否为 NSObject 及其子类的实例: %d" ,[app isKindOfClass : NSObject . class ]);
NSLog ( @"app 是否实现 FKEatable 协议: %d" ,[app conformsToProtocol : @protocol ( FKEatable )]);
{
FKApple * app = [[ FKApple alloc ] init ];
NSLog ( @"%@" , [app class ]);
NSLog ( @"app 是否为 FKApple 的实例: %d" , [app isMemberOfClass : FKApple . class ]);
NSLog ( @"app 是否为 NSObject 的实例: %d" ,[app isMemberOfClass : NSObject . class ]);
NSLog ( @"app 是否为 FKApple 及其子类的实例: %d" ,[app isKindOfClass : FKApple . class ]);
NSLog ( @"app 是否为 NSObject 及其子类的实例: %d" ,[app isKindOfClass : NSObject . class ]);
NSLog ( @"app 是否实现 FKEatable 协议: %d" ,[app conformsToProtocol : @protocol ( FKEatable )]);
}
一、
本节代码涉及到的知识点:
1.NSObject提供了以下三个方法可以判断类的继承关系:
① isKindOfClass 需要传入一个Class参数,用于判断该对象是否是该类的实例或该类子类的实例。
② isMemberOfClass
需要传入一个Class参数,用于判断该对象是否是该类的实例。
③ conformsToProtocol 需要传入一个Protocol参数,用于检查该对象是否实现了指定协议类的方法。