您的位置:首页 > 移动开发 > Objective-C

NSObject易误解处

2015-12-30 00:00 633 查看
1.isKindOfClass与isMemberOfClass,都是对象方法
前者判断是否该类或其子类,后者只判断是否该类。
BOOL c1 = [[NSMutableArray array] isKindOfClass:[NSArray class]];//yes
BOOL c2 = [[NSMutableArray array] isMemberOfClass:[NSArray class]];//no

2.conformsToProtocol有类方法有对象方法,检查是否遵从某协议,与是否实现改协议无关

一个接收者遵从一个协议,可以是直接接受这个协议,也可以继承一个已经接受这个协议的类

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) 内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面尤其的丰富。内省是对象揭示自己作为一个运行时对象的详细信息的一种能力。这些详细信息包括对象在继承树上的位置,对象是否遵循特定的协议,以及是否可以响应特定的消息。NSObject协议和类定义了很多内省方法,用于查询运行时信息,以便根据对象的特征进行识别。 明智地使用内省可以使面向对象的程序更加高效和强壮。它有助于避免错误地进行消息派发、错误地假设对象相等、以及类似的问题。 总结: 通过NSObject,其它类继承了一些基础的与Objective-C语言编译器系统之间的接口,并且获得了在它的实例中表现为一个对象的能力。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: