zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    PHP之常用设计模式
    MySQL之慢查询日志和通用查询
    mysql之找回误删数据
    PHPer未来路在何方...
    如何成为更优秀的程序员
    常见的 CSRF、XSS、sql注入、DDOS流量攻击
    API接口TOKEN设计
    成为更好的程序员的八中途径
    奉秉格言
    PHP优化与提升
  • 原文地址:https://www.cnblogs.com/xwoder/p/4252245.html
Copyright © 2011-2022 走看看