cocoa - 在 Cocoa 中,将私有(private) API 放在 .m 文件中,将公共(public) API 放在 .h 文件中,这是一个好习惯吗?

标签 cocoa interface implementation private

我当前项目中的许多类都有几个只能从类本身内部调用的属性和方法。此外,根据类(class)的当前状态,它们可能会扰乱类(class)的工作。
目前,所有这些接口(interface)都在 .h 文件的主接口(interface)声明中定义。将“私有(private)”方法和属性放在 .m 文件的顶部是否被认为是好的做法?

这不会影响任何事情,因为我很可能是唯一一个查看此源代码的人,但当然,了解 future 的项目会很有趣。

最佳答案

从 Objective-C 2.0 开始,最佳实践是将私有(private)方法放在“类扩展”中。如果您尚未实现其中一种方法,这允许编译器向您发出警告。类扩展还允许您修改 @properties 的读/写语义,以便公共(public) API 可以,例如,特定 readonly对于属性,而在内部该属性可以用作 readwrite .

在.h中:

@interface MyClass : NSObject
{}

@property (readonly) id myProp;

- (void)aPublicMethod;
@end

以 .m 为单位:

@interface MyClass ()
@property (readwrite) id myProp; //upgrade myProp to readwrite within the class.

- (id)aPrivateMethod;
@end

@implementation MyClass
@synthesize myProp;

- (void)aPublicMethod { ... }

- (id)aPrivateMethod;

@end

如果您忘记实现-aPrivateMethod主内@implementation block ,编译器会给出警告。这比使用像 @interface MyClass (PrivateMethods) 这样的类别的旧方法更好。在这种情况下,编译器无法警告您该方法未实现。

关于cocoa - 在 Cocoa 中,将私有(private) API 放在 .m 文件中,将公共(public) API 放在 .h 文件中,这是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2539853/

相关文章:

iphone - iPhone 应用程序的界面 Photoshop 尺寸

c - 在哪里可以找到实现编译器所需的完整 C 语法?

objective-c - -(BOOL)trackMouse :inRect:ofView:untilMouseUp: Is never invoked

objective-c - 关闭 NSWindow 并释放内存,但在单击按钮时重新打开它

cocoa - NSOpenPanel 的 swift 2.0 等效项

c# - 属性、接口(interface)或抽象类

macos - iCloud:如果在本地打开文件时在另一台计算机上修改文件,则会失去写入文件的权限

vb.net - 如何使用 VB.NET 中的接口(interface)处理事件?

objective-c - 简单的委托(delegate)示例?

java - 在小型 RTS 中实现单位的最佳方法是什么?