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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值