NSObject易误解处

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



3.class和superclass和isSubclassOfClass   description和debugDescription

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



4. isProxy,判断一个方法是否继承于NSProxy,是返回yes,不是返回no,继承与NSObject调用该方法都返回no。

官网Cocoa框架有以下介绍:Cocoa supplies two root classes:NSObject and NSProxy. 这就解释了你的所谓的“几乎”。剩下不继承NSObject的都继承NSProxy,由于NSProxy的应用比较特殊,在Cocoa程序中比较少见,具体的例子能够参考官方API说明文档中关于NSProxy类的介绍,里面讲到了一些例子,好比NSDistantObject
BOOL c6 = [[NSMutableArray array] isProxy];//no



5. isEqual必须所有等, 而hash值返回色是一个整,这个说实话不理解,有知道望解答下。
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语言编译器系统之间的接口,而且得到了在它的实例中表现为一个对象的能力。 接口

相关文章
相关标签/搜索