美文网首页
NSObject 为啥要遵循 NSObject 协议呢 ?

NSObject 为啥要遵循 NSObject 协议呢 ?

作者: 天空中的球 | 来源:发表于2020-06-22 13:17 被阅读0次
    小伙伴无意间发出的一个疑惑,NSObject 为啥要遵循 NSObject 协议呢 ?
    NSObejct

    首先看看协议中有哪些, 都是我们常见的方法:

    - (BOOL)isProxy;
    - (BOOL)isKindOfClass:(Class)aClass;
    - (BOOL)isMemberOfClass:(Class)aClass;
    - (BOOL)conformsToProtocol:(Protocol *)aProtocol;
    - (BOOL)respondsToSelector:(SEL)aSelector;
    

    经过查找发现:

    • 在Objective-C 2.0之前, Protocol 的这个 @optional 选项是不存在的,所有的 Protocol 方法都是必须实现的。所以不遵循 <NSObject> 也没关系,只要判断指针是否存在然后直接调用就完了。
    • 在Objective-C 2.0之后,加了@optional 特性,于是乎必须使用 的 respondsToSelector: 方法先做一次判断了。
    延伸:

    NSProxy 也是遵循 <NSObject> 协议的

    NSProxy

    理解:

    • 一个对象要调用另一个对象的方法,不是采取直接调用的方式,而是通过调用某个实现了特定接口/协议或者继承了某个抽象类的对象这种方式来进行解耦。

    • NSProxy为什么不继承NSObject?

      • 简单说就是不需要实现那么多杂七杂八的东西,多了反而可能引起冲突。
      • 建立 NSProxy 对象的目是为了预留大多数未实现的方法,使用forwardInvocation:方法来转发。
      • 而NSProxy是遵循了NSObject协议的,里面声明了一套所有的根类都可以实现的基础方法。
    综上原因和相关:
    • 1、为了兼容 Objective-C 2.0 的新增的特性,来保证我们调用的安全性。
    • 2、NSObject的类和协议在Objective-C中存在于不同的命名空间。我们可以同时拥有相同的类和协议,但是他们在编程语言上是不相关联的, 所以没有关系。
    • 3、无形中也是在解耦的。

    总结: 一个 NSObject 协议允许多个根类拥有相同的基础方法,所以我们能很方便的声明一个包含了相同基础功能的协议 。
    而 NSObject 类遵循了 NSObject 协议,就可以把所有的东西融合到一起啦。

    笔记来源:

    相关文章

      网友评论

          本文标题:NSObject 为啥要遵循 NSObject 协议呢 ?

          本文链接:https://www.haomeiwen.com/subject/hbtxfktx.html