关于cocoa:Objective-C中的“私有方法”或静态函数。

“Private methods” or static functions in Objective-C. Which one should I use?

在阅读Objective-C中为类定义私有方法的最佳方法时,我最终会遇到编程风格的疑问。对于这个问题(在风格上)哪种解决方案更好?使用一个类别并在.m文件中的@interface指令中声明它,或者使用接收对象的静态函数。

谢谢


分类是前进的道路。

谷歌目标C风格指南说,

Use a private category to prevent cluttering the public header.


If you are using Objective-C 2.0, you should instead declare your private category using a class extension, for example:

@interface GMFoo () { ... }
which will guarantee that the declared methods are implemented in the @implementation section by issuing a compiler warning if they are not.

"类扩展名的声明与类别相同,但没有名称"
--解释了类扩展


如果您没有关于使用哪个的直接答案,请选择函数。

大多数时候我使用函数(>90%)。

方法对于多态性和接口很有用。

每种方法都有其他注意事项:

函数通常更小、更快,并且编译器能够内联它们。如果没有理由使用方法导致问题,并且您不需要在类中使用任何独占的方法,那么使用函数。

如果不需要访问器开销或不需要实例方法中可用的其他功能(如@synchronized),方法(或类别,如果您愿意)非常方便。在我的程序中,这些特性的可能性要小得多,而且通常不需要使用方法。

方法导出额外的符号,通常会产生更高(但很小)的开销,因此,它们通常会使二进制文件稍大一些,而可执行文件稍慢一些(通常不会注意到,除非经常使用它们)。

使用/创建私有方法也存在风险,因为接收者/子类可能实现/声明该方法。这通常是不必要的风险。我更喜欢编译器/链接器为我解决这个问题,而不是发现它在运行2周后(很难找到问题)遇到了一个奇怪的情况。如果您打算很快公开接口,方法也可能很有用。