NSObject易误解处
2015-12-30 00:00
633 查看
1.isKindOfClass与isMemberOfClass,都是对象方法
前者判断是否该类或其子类,后者只判断是否该类。
2.conformsToProtocol有类方法有对象方法,检查是否遵从某协议,与是否实现改协议无关
一个接收者遵从一个协议,可以是直接接受这个协议,也可以继承一个已经接受这个协议的类
3.class和superclass和isSubclassOfClass description和debugDescription
4.
isProxy,判断一个方法是否继承于NSProxy,是返回yes,不是返回no,继承与NSObject调用该方法都返回no。
官网Cocoa框架有如下介绍:Cocoa supplies two root classes:NSObject and NSProxy. 这就解释了你的所谓的“几乎”。剩下不继承NSObject的都继承NSProxy,因为NSProxy的应用比较特殊,在Cocoa程序中比较少见,具体的例子可以参考官方API说明文档中关于NSProxy类的介绍,里面讲到了一些例子,比如NSDistantObject
5.
isEqual必须全部等, 而hash值返回色是一个整,这个说实话不理解,有知道望解答下。
6.内省(Introspection) 内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面尤其的丰富。内省是对象揭示自己作为一个运行时对象的详细信息的一种能力。这些详细信息包括对象在继承树上的位置,对象是否遵循特定的协议,以及是否可以响应特定的消息。NSObject协议和类定义了很多内省方法,用于查询运行时信息,以便根据对象的特征进行识别。 明智地使用内省可以使面向对象的程序更加高效和强壮。它有助于避免错误地进行消息派发、错误地假设对象相等、以及类似的问题。 总结: 通过NSObject,其它类继承了一些基础的与Objective-C语言编译器系统之间的接口,并且获得了在它的实例中表现为一个对象的能力。
前者判断是否该类或其子类,后者只判断是否该类。
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语言编译器系统之间的接口,并且获得了在它的实例中表现为一个对象的能力。
相关文章推荐
- Object源码后记
- Objective-c与js相互调用
- JSONArray.fromObject()注入处理日期Date格式
- SQL Server系统表sysobjects介绍与使用
- IOS开发系列----Objective-c的内存管理
- #Objective - C - UI-design - 第一天 -UIKit框架-UIKit-UIView
- java中Object源码分析
- gcc报错 can not be used when making a shared object; recompile with -fPIC
- 【Objective-C学习记录】第二十八天
- java JsonObject的用法以及map总同一个key,但是不同的value,如何存储的问题
- ASP.NET MVC - Redirect-and-Post-JSON-Object-in-ASP-NET-MVC
- 别样JAVA学习(五)继承上(1.0)Object类equals()
- Objective-C Runtime 运行时之:Method Swizzling
- Objective-C Runtime<1>
- 缺少动态连接库.so--cannot open shared object file: No such file or directory
- ObjectAnimator设置动画
- Objective-C对方法进行注释的方法
- Objective-C基础笔记(8)Foundation经常使用类NSString
- setValue和setObject的区别
- objective-C nil,Nil,NULL 和NSNull的小结