代码:
#import <Foundation/Foundation.h>
/******************************
* Learning协议
******************************/
@protocol Learning
- (void)learn;
@end
/******************************
* Person类
******************************/
@interface Person : NSObject
@end
@implementation Person
@end
/******************************
* Student类
******************************/
@interface Student : Person <Learning>
@end
@implementation Student
- (void)learn {
NSLog(@"Student - learn");
}
@end
/******************************
* GoodStudent类
******************************/
@interface GoodStudent : Student
@end
@implementation GoodStudent
- (void)learn {
NSLog(@"GoodStudent - learning");
}
@end
void isKindOfClassTest(void);
void isMemberOfClassTest(void);
void conformsToProtocolTest(void);
void instanceResopnsesToSelectorTest(void);
void respondsToSelectorTest(void);
/******************************
* main函数
******************************/
int main(int argc, const char* argv[]) {
isKindOfClassTest();
isMemberOfClassTest();
conformsToProtocolTest();
instanceResopnsesToSelectorTest();
respondsToSelectorTest();
return 0;
}
void isKindOfClassTest(void) {
Student* student = [[Student alloc] init];
// 实例方法isKindOfClass:用于判断一个实例是否是某个类或其子类的实例
NSLog([student isKindOfClass:[Person class]] ? @"YES" : @"NO");
NSLog([student isKindOfClass:[Student class]] ? @"YES" : @"NO");
NSLog([student isKindOfClass:[GoodStudent class]] ? @"YES" : @"NO");
}
void isMemberOfClassTest(void) {
Student* student = [[Student alloc] init];
// 实例方法isMemberOfClass:用于判断一个实例是否是某个类实例
NSLog([student isMemberOfClass:[Person class]] ? @"YES" : @"NO");
NSLog([student isMemberOfClass:[Student class]] ? @"YES" : @"NO");
NSLog([student isMemberOfClass:[GoodStudent class]] ? @"YES" : @"NO");
}
void conformsToProtocolTest(void) {
Person* person = [[Person alloc] init];
Student* student = [[Student alloc] init];
GoodStudent* goodStudent = [[GoodStudent alloc] init];
// 实例方法conformsToProtocol:用于判断一个类是否采用了某个协议
NSLog([person conformsToProtocol:@protocol(Learning)] ? @"YES" : @"NO");
NSLog([student conformsToProtocol:@protocol(Learning)] ? @"YES" : @"NO");
NSLog([goodStudent conformsToProtocol:@protocol(Learning)] ? @"YES" : @"NO");
}
void instanceResopnsesToSelectorTest(void) {
// 类方法instancesRespondToSelector:用于判断一个类的实例是否可以响应给定的消息
NSLog([Person instancesRespondToSelector:@selector(learn)] ? @"YES" : @"NO");
NSLog([Student instancesRespondToSelector:@selector(learn)] ? @"YES" : @"NO");
NSLog([GoodStudent instancesRespondToSelector:@selector(learn)] ? @"YES" : @"NO");
}
void respondsToSelectorTest(void) {
Person* person = [[Person alloc] init];
Student* student = [[Student alloc] init];
GoodStudent* goodStudent = [[GoodStudent alloc] init];
// 实例方法respondsToSelector:用于判断某个类的实例是否可以响应给定的消息
NSLog([person respondsToSelector:@selector(learn)] ? @"YES" : @"NO");
NSLog([student respondsToSelector:@selector(learn)] ? @"YES" : @"NO");
NSLog([goodStudent respondsToSelector:@selector(learn)] ? @"YES" : @"NO");
}
输出:
YES
YES
NO
NO
YES
NO
NO
YES
YES
NO
YES
YES
NO
YES
YES