• 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
  • 相关阅读:
    URL域名获取
    SQL Server 索引结构及其使用(二)
    SQL Server 索引结构及其使用(一)[转]
    查询数据库中所有表的数据量、有效数据量以及其它定制数据量
    转:Servlet的url匹配以及url-pattern详解
    转:在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程
    MyEclipse +Servlet 乱码
    MyEclipse +Tomcat 异常操作
    Android Include标签
    转ATL对象类型
  • 原文地址:https://www.cnblogs.com/xwoder/p/4252245.html
Copyright © 2020-2023  润新知