我正在学习objective-C,我知道我们可以使用扩展来向接口添加一些私有成员。
但是书上说()里面应该什么都没有
我阅读了以下代码片段
@interface Tree(Private)
- (void)blah:(int)num;
@end
我想知道为什么里面有 Private ()
我正在学习objective-C,我知道我们可以使用扩展来向接口添加一些私有成员。
但是书上说()里面应该什么都没有
我阅读了以下代码片段
@interface Tree(Private)
- (void)blah:(int)num;
@end
我想知道为什么里面有 Private ()
您可以在类类别声明中放置任何名称,通常表明该类别的用途。
因此,在您的情况下,代码的作者想要告诉这些方法是用于类本身的内部使用,而不是打算从其他类调用
您示例中的声明精确地称为类别(而不是扩展名)。
您可以向任何给定的类添加任意数量的类别(即使您无权访问源代码)。类别允许您向类添加新方法,但不能添加新的 ivars 或属性。[1]
每个类别都有一个名称,即括号之间的位。同名的同一个类不应该有两个不同的类别。
当名称为空时,这称为扩展名。扩展与类别有一些细微差别:您可以将 ivars 和属性添加到扩展中,并且您只能将它们用于您可以访问其源代码的类。[1]
通常,扩展(如您书中的示例)在.m
文件顶部声明,并用于声明仅在该文件中使用的方法、ivars 和/或属性(通常由单个类组成)。
PD:如果您真的想通过类别而不是通过扩展添加新属性,您实际上可以使用关联对象 [2][3] 来实现。
在被视为类别的情况下,但由于它位于 .m 文件中,因此将具有相同的效果。您还可以查看 Xcode 中的提示:
作为中间的被认为是Tree(description)
最后一个Tree ()
这里有两个密切相关的概念:类类别和类扩展。类类别在括号内包含一个名称,最常用于向现有类添加方法或将方法组织到逻辑组中。类扩展扩展了类的内部实现(即用于定义私有属性、方法等)。
更多细节可以在 Apple 的开发网站上找到: