iphone - 如何理解NSObject,它既是协议(protocol)又是接口(interface)

标签 iphone interface protocols nsobject

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

//1. 这是一个协议(protocol)

@protocol NSObject

//2.这里是一个接口(interface),符合上面的协议(protocol)

@interface NSObject <NSObject> {
    ...

//3. 下面的“( )”是什么意思? NSCoderMethods 是一个协议(protocol)

@interface NSObject (NSCoderMethods)

NSObject 如此重要,我需要理解它为什么要这样设计?

最佳答案

1.

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


2.

现在对于协议(protocol)...它存在是因为 NSObject 不是唯一支持 -retain-performSelector: 等方法的根类。

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

NSProxy 的目标通常是 NSObject,因此接口(interface)还应该支持 -retain-performSelector: 等方法。但 NSProxy 不能继承 NSObject,因为两者之间不存在 is-a 关系。

为了表达兄弟关系,两者都采用相同的协议(protocol),不幸的是,也称为 NSObject。

使 NSObject 成为协议(protocol)还有一个优点,即用户定义的协议(protocol)可以通过以下方式请求采用者支持所有常用的 NSObject 操作

@protocol Foo <NSObject>
...

3.

It's a category ,它向 NSObject 添加了额外的方法实现。

关于iphone - 如何理解NSObject,它既是协议(protocol)又是接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3099396/

相关文章:

arrays - 在 [SomeProtocol] 类型的数组中查找对象的索引

swift - 这是一个正确的例子来展示 Swift 面向协议(protocol)设计的好处吗?

iphone - 如何通过 UISlider 更新 iPhone 上的音乐音量?

ios - 在 iOS 7 中隐藏状态栏时防止 UINavigationController 调整原点

android - 智能手机到智能手机的通信 - 有哪些选择?

c# - 一个好的做法是留下一个空的界面吗?

interface - 设计接口(interface) : predict methods needed, 约束自己并处理想到的代码

wcf - 我如何在 MVC 中使用我的 Web 引用?

swift - 通用完成作为非通用通过

iphone - FMDB SQLite 包装器和用户定义/自定义函数