为什么扩展中有私有?

时间:2013-07-18 15:02:09

标签: ios objective-c

我正在学习Objective-C,我知道我们可以使用扩展来为接口添加一些私有成员。

但书中说()

中应该没有任何内容

我阅读了以下代码段

@interface Tree(Private)
- (void)blah:(int)num;
@end

我想知道为什么有私人内部()

4 个答案:

答案 0 :(得分:2)

您可以在类别类别声明中添加任何名称,通常表示该类别的目的。

因此,在您的情况下,代码的作者想要告诉这些方法是为了内部使用类本身而不打算从其他类调用

答案 1 :(得分:1)

您的示例中的声明称为类别(不是扩展名)。

您可以根据需要为任何给定的类添加任意数量的类别(即使您无权访问源代码)。类别允许您向类添加新方法,但不能添加新的ivars和属性。 [1]

每个类别都有一个名称,即括号之间的位。对于具有相同名称的同一个类,不应该有两个不同的类别

当名称为空时,这称为扩展名。扩展与类别略有不同:您可以向扩展添加ivars和属性,并且只能将它们用于您有权访问源代码的类。 [1]

通常,扩展(如本书中的示例)在.m文件的顶部声明,用于声明方法,ivars和/或属性仅在该文件中使用(通常由单个类组成)。

PD:如果你真的想通过类别而不是通过扩展添加新属性,你实际上可以使用相关对象[2] [3]来实现。< / p>

  1. http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html
  2. Defining a property in iOS class extension
  3. http://oleb.net/blog/2011/05/faking-ivars-in-objc-categories-with-associative-references/

答案 2 :(得分:0)

在被视为类别的情况下,但由于它位于.m文件中,因此它具有相同的效果。您还可以看到Xcode的提示:

enter image description here

作为中间人考虑像Tree(description)和最后一个Tree ()

答案 3 :(得分:0)

这里有两个密切相关的概念:类类别和类扩展。类类别在括号内包含名称,最常用于向现有类添加方法或将方法组织到逻辑组中。类扩展扩展了类的内部实现(即用于定义私有属性,方法等)。

更多细节可以在Apple的开发网站上找到:

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html