代码之家  ›  专栏  ›  技术社区  ›  Forrest

如何理解nsObject,它既是协议又是接口

  •  2
  • Forrest  · 技术社区  · 16 年前

    在nsobject.h文件中可以看到以下内容

    / / 1。这是一个协议

    @protocol NSObject
    

    / / 2。这里有一个符合上述协议的接口

    @interface NSObject <NSObject> {
        ...
    

    / / 3。下面的“()”是什么意思?nscodemethods是一种协议

    @interface NSObject (NSCoderMethods)
    

    nsObject非常重要,我需要理解,为什么它是这样设计的?

    1 回复  |  直到 16 年前
        1
  •  5
  •   Community Mohan Dere    9 年前

    1。

    它是一个类(接口),因为现在objc中的所有具体类都继承了nsObject的实现,以支持诸如引用计数和运行时类型检查等功能。


    2。

    现在按协议…它的存在是因为nsObject不是唯一支持 -retain 和 -performSelector: 等方法。

    一个重要的课程是 NSProxy ,它充当将消息转发到某些实际对象的代理。

    nsproxy的目标通常是nsobjects,因此接口也应该支持 -保留 和 -执行选择器: 等方法。但是nsproxy不能从nsObject继承,因为没有 IS-A 两者之间的关系。

    为了表达兄弟关系,双方都采用了相同的协议,不幸的是,这也被称为nsobject。

    使nsObject成为协议还有一个优点,即用户定义的协议可以请求采用者通过

    @protocol Foo <NSObject>
    ...
    

    三。

    It's a category ,这会向nsObject添加额外的方法实现。