3

我目前在我所有的 Objective-c 项目中都使用类扩展。

我想这只是“语言”的问题,但是通过阅读此链接Categories and Extensions上的 Apple 文档:

类扩展的一个常见用途是将公开声明为只读的属性重新声明为私有的 readwrite:
......

一个类通常也有一个公开声明的 API,然后有一个私有声明的附加方法,供该类或该类所在的框架单独使用。

实际上,当我们用我的母语说“普通”时,它意味着一种隐含的方式,即“还有其他东西……”。

所以我非常基本的问题是?是否还有其他可以使用扩展的场景。

4

3 回答 3

1

类扩展还允许您将 iVar 添加到类中。

这样,您可以从公共头文件中隐藏iVar。

我知道很多人只是简单地将合成属性用于所有内容,尤其是使用 ARC。
我不会讨论这个,因为它不是主题,但它实际上是两个完全不同的东西,因为属性至少可以从外部读取。

因此,通过类扩展,您可以隐藏且安全的私有 iVar。
这有助于保持您的公共标头清洁,并且还可以防止子类在需要时访问它们。

编辑

正如 Pfitz 在评论中所说,现在也可以使用现代运行时直接在实现中完成:

@implementation
{
   ... // iVars
}
于 2012-09-19T14:22:12.753 回答
1

类扩展的一种典型附加用途,定义为:

@interface SomeClass()
@end

是声明类实现使用的私有方法。从 Xcode 4.4 开始(我认为),在实现中定义私有方法之前不再需要声明它们 - 所以我现在很少使用类扩展。

编辑

哎呀,对不起,我没有注意 OP 原始报价中的第二段。好吧,那是我能想到的唯一用途。

于 2012-09-19T14:01:51.297 回答
1

您还可以使用类扩展来声明协议一致性,而无需向全世界宣传。

于 2012-09-19T14:26:14.537 回答