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
  • 相关阅读:
    WTL for Visual Studio 2012 配置详解
    自己动手让Visual Studio的Win32向导支持生成对话框程序
    改造联想Y480的快捷键(跨进程替换窗口过程(子类化)的实现——远程线程注入)
    Visual Studio 2012 Ultimate RTM 体验(附下载地址和KEY)
    VC++实现获取文件占用空间大小的两种方法(非文件大小)
    为Visual Studio添加默认INCLUDE包含路径一劳永逸的方法(更新)
    Winsdows 8 环境下搭建Windows Phone 开发环境
    Linq to Visual Tree可视化树的类Linq查询扩展API(译)
    检测元素是否在界面可显示区域
    Debug the Metro Style App:Registration of the app failed
  • 原文地址:https://www.cnblogs.com/xwoder/p/4252245.html
Copyright © 2011-2022 走看看