阅读Best way to define private methods for a class in Objective-C时,我最终遇到编程风格疑问。对于这个问题,哪个是更好的解决方案(就风格而言)?要使用类别并在.m文件的@interface指令中声明它,或者使用接收对象的静态函数。
由于
答案 0 :(得分:6)
分类是要走的路。
Google Objective-C Style Guide says,
使用私有类别可以防止公共标题混乱 ...
如果您使用的是Objective-C 2.0,则应使用类扩展声明您的私有类别,例如:@interface GMFoo () { ... }
这将保证声明的方法在@implementation部分通过发出编译器警告来实现(如果不是)。
“类扩展声明就像一个类别,但没有名称” - Class Extensions Explained
答案 1 :(得分:2)
如果您没有立即回答使用哪个,请选择功能。
我大部分时间都使用功能(> 90%)。
方法对多态性和接口很有用。
每个都有其他注意事项:
函数通常会更小,更快,编译器可以内联它们。如果没有理由通过使用方法导致问题,并且您不需要任何独有的课堂使用,那么请使用该功能。
如果您不想要访问者开销或者想要实例方法中可用的其他功能(如@synchronized),则方法(或类别,如果您愿意)很方便。在我的程序中,这些功能的可能性要小得多,而且通常不需要使用方法。
方法导出额外的符号,通常会产生更高(但很小)的开销,因此,它们通常会使二进制文件略大,可执行文件稍慢(通常不会注意到,除非您经常使用它们)。
使用/创建私有方法也存在风险,因为接收器/子类可能实现/声明方法。这通常是不必要的风险。我更喜欢编译器/链接器为我排序,而不是发现它在运行2周后在运行时遇到奇怪的情况(并且很难找到问题)。如果您打算在不久的将来公开界面,方法也可能有用。