objective-c私有与公共方法和标题中的声明是否?

时间:2011-03-13 23:54:32

标签: iphone objective-c methods private-methods

Objective-c中私有方法的最佳实践方法是什么?这是一种只将该类用作辅助方法的方法。

特别是我不清楚的是:

  1. 是否需要将头文件中指定的方法设为私有?即为什么不将它从头文件中删除,
  2. 如果您可以将其从头文件中删除,那么拥有私有方法有什么意义?
  3. 或者在objective-c中是否存在真正的私有方法,在这种情况下,最好只指定头文件中的所有内容而不打扰私有方法吗?
  4. 感谢

3 个答案:

答案 0 :(得分:7)

无需在公共头文件中指定方法。如果模块中的类应该是“朋友”,您可能需要一个“私有”头文件供模块中的其他类使用。您甚至可以拥有一个“受保护”的头文件,例如Apple对UIGestureRecognizerSubclass.h执行的操作。但这完全是惯例,语言本身并不支持。

Objective-C中的私有方法只是一个未公开记录的方法;任何方法仍然可以从任何地方调用,只要调用者知道它的名称,以便创建适当的选择器。不公开记录方法的优点是您可以自由更改或删除它而不必担心向后兼容性。将它们从头文件中删除是一种不公开记录它们的方法。

答案 1 :(得分:6)

您可能想要使用的内容称为“类扩展”。它们看起来很相似,但不应与类别混淆。这将允许您在.m文件中声明私有方法,并且您将获得所有不错的IDE更正和建议。

Here's a decent article on it
And a related SO question

答案 2 :(得分:2)

最佳实践(甚至是检查的编译器选项)是所有方法都以某种方式声明。要“隐藏”帮助方法以避免窥探,请在实现.m文件中声明它,如:

#import Client;

@interface myClass (Private)
- (void) privateMethod;
- (float) bankAccountBalanceForClient:(Client *)client;
@end

@implementation myClass
- (void) privateMethod;
{
    //foo here
}

等等。私有方法是一个名为Private of myClass方法的类别。这个类别可以在任何地方声明,甚至可以在名为私有方法的主.h文件中声明,尽管这将是一个维护噩梦。

因此,使用公共方法的公共.h文件和声明私有方法的.m文件,您可以在某处声明所有方法。我使用这个编译器选项来确保并强制它,以便所使用的任何方法实际上都在某处声明(或者我得到语法错误),因此我没有因为找不到方法而导致任何运行时崩溃。