NSObject的常见方法

代码:

#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
原文地址:https://www.cnblogs.com/xwoder/p/4252245.html