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
时间: 2024-10-18 02:10:13

NSObject的常见方法的相关文章

NSobject的基本方法使用

除了NSobject以外,所有的类都有父类.默认的父类一般是NSobject. 我们建立一个名为person,继承NSobject的子类,来方便下面的讨论. //初始对象 person *niang=[[person alloc] init]; //1 这个方法是判断有没有这个实例方法,返回值是bool类型.有,返回1,没有,返回0.只能判断实例方法. BOOL a=[person instancesRespondToSelector:@selector(print)]; NSLog(@"%d&

php学习笔记(JS中的常见方法)

JS中的常见方法: 1.日期时间函数(需要用变量调用): var b = new Date(); //获取当前时间 b.getTime() //获取时间戳 b.getFullYear() //获取年份 b.getMonth()+1; //获取月份 b.getDate() //获取天 b.getHours() //获取小时 b.getMinutes() //获取分钟 b.getSeconds() //获取秒数 b.getDay() //获取星期几 b.getMilliseconds() //获取毫

window对象中的常见方法

<body><!-- window对象中的常见方法--><script type="text/javascript"> var timeid; function windowMethodDemo(){ //var b = confirm("你真的确定点击吗?"); //alert("b="+b); //setTimeout("alert('time run')",40); timeid=se

Linux下编程获取本地IP地址的常见方法

转载于:http://blog.csdn.net/k346k346/article/details/48231933 在进行linux网络编程时,经常用到本机IP地址.本文罗列一下常见方法,以备不时之需. 获取本机IP地址,是一个相当灵活的操作,原因是网络地址的设置非常灵活而且都是允许用户进行个性化设置的.比如一台计算机上可以有多块物理网卡或者虚拟网卡,一个网卡上可以绑定多个IP地址,用户可以为网卡设置别名,可以重命名网卡.用户计算机所在网络拓扑结构未知,主机名设置是一个可选项,并且同样可以为一

数组的常见方法

数组的常见方法:转换方法:toString();把数组里的元素连同逗号一起转换为一个字符串, 并返回结果. var arr4 = [2, 5, 6, 7, 8, 9];console.log(arr4);console.log(arr4.toString()); 重点:join();将数组中的每个元素取出来拼接成一个字符串,并 返回结果. 参数说明(字符串类型.指定每个元素间的连 接符号.)console.log(arr4.join("-")); 操作方法:push();向数组的末尾添

java HashMap和HashTable区别,Collection常见方法

/** * @param args * 面试题 * HashMap和Hashtable的区别 * 共同点: * 底层都是哈希算法,都是双列集合 * 区别: * 1,HashMap是线程不安全的,效率高,JDK1.2版本 * Hashtable是线程安全的,效率低,JDK1.0版本的 * 2,HashMap可以存储null键和null值 * Hashtable不可以存储null键和null值 */ public static void main(String[] args) { HashMap<S

WEB前端性能优化常见方法

web前端是应用服务器处理之前的部分,前端主要包括:HTML,CSS,javascript,image等各种资源,针对不同的资源有不同的优化方式. 1. 内容优化 (1)减少HTTP请求数:这条策略是最重要最有效的,因为一个完整的请求要经过DNS寻址,与服务器建立连接,发送数据,等待服务器响应,接收数据这样一个消耗时间成本和资源成本的复杂的过程. 常见方法:合并多个CSS文件和js文件,利用CSS Sprites整合图像,Inline Images(使用 data:URL scheme在实际的页

Xcode--随机数和UIView常见方法

一.类扩展(class extension,匿名分类) 1.格式 @Interface 类名() { //成员变量... } //方法声明... @end 2.作用 1>写在.m文件中 2>一般用来扩充私有成员变量.@property属性.方法等 二.随机数生成 1.arc4random() 会生成任意正整数和0 2.arc4random_uniform(100) 会生成0-99的整数(包括0和99) 三.UIView常见方法 1.addSubview:(UIView *)child 添加子控

Oracle SQL优化一(常见方法)

1.表访问方式优化: a)普通表优先“Index Lookup 索引扫描”,避免全表扫描 大多数场景下,通过“Index Lookup 索引扫描”要比“Full Table Scan (FTS) 全表扫描”效率要高的多.在编写SQL时,为了保证查询能够使用索引,需要避免出现如下场景: is null 和 is not null 在oracle中null是不能够作为索引的,如果某列数据中有“null”,不要在该列上创建索引,即使创建,也不会提高查询性能. 而在SQL语句中,如果使用is null和