1.isKindOfClass与isMemberOfClass,都是对象方法 框架
前者判断是否该类或其子类,后者只判断是否该类。 spa
BOOL c1 = [[NSMutableArray array] isKindOfClass:[NSArray class]];//yes BOOL c2 = [[NSMutableArray array] isMemberOfClass:[NSArray class]];//no
2.conformsToProtocol有类方法有对象方法,检查是否听从某协议,与是否实现改协议无关 debug
一个接收者听从一个协议,能够是直接接受这个协议,也能够继承一个已经接受这个协议的类 code
BOOL c3 = [[NSArray array] conformsToProtocol:@protocol(UITabBarControllerDelegate)];//no BOOL c4 = [[NSArray class] conformsToProtocol:@protocol(NSObject)];//yes
Class class1 = [NSArray class]; Class class2 = [NSArray superclass]; NSArray *array = @[@"ddss", @"dsdd", @"dfsdds"]; NSLog(@"\n%@\n%@", [array description], [array debugDescription]); BOOL c5 = [[NSMutableArray class] isSubclassOfClass:[NSMutableArray class]];//yes
BOOL c6 = [[NSMutableArray array] isProxy];//no
NSArray *arr = @[@"ddd", @"ddd"]; NSArray *arr1 = @[@"ddd", @"ddd", @"ddd"]; BOOL c7 = [arr isEqual:arr1]; NSUInteger hash1 = [arr hash]; NSUInteger hash2 = [arr1 hash]; NSDictionary *dic1= @{@"ddd":@"dd", @"ddf":@"ffff"}; NSDictionary *dic2= @{@"ddd":@"ff", @"ddf":@"ffffff"}; NSUInteger hash3 = [dic1 hash]; NSUInteger hash4 = [dic2 hash];
6.内省(Introspection) orm
内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面尤为的丰富。内省是对象揭示本身做为一个运行时对象的详细信息的一种能力。这些详细信息包括对象在继承树上的位置,对象是否遵循特定的协议,以及是否能够响应特定的消息。NSObject协议和类定义了不少内省方法,用于查询运行时信息,以便根据对象的特征进行识别。 对象
明智地使用内省能够使面向对象的程序更加高效和强壮。它有助于避免错误地进行消息派发、错误地假设对象相等、以及相似的问题。 继承
总结:经过NSObject,其它类继承了一些基础的与Objective-C语言编译器系统之间的接口,而且得到了在它的实例中表现为一个对象的能力。 接口