Objective-C - 将变量保存在.h或.m - 任何差异?

onl*_*man 2 iphone objective-c ios

在.h文件中 -

@interface MyClass : NSObject {
    @someAccessibilityModifier int a; // someAccessibilityModifier = @public, @private
}
Run Code Online (Sandbox Code Playgroud)

或.m文件 -

@implementation MyClass {
    @someAccessibilityModifier int a; // someAccessibilityModifier = @public, @private
}
Run Code Online (Sandbox Code Playgroud)

两个方面有什么不同(因为两种方式,a可访问性和行为都是一样的)?

Lil*_*ard 5

在前者,a 在类的外部访问.你必须指明@private你是否希望这是真的.

在任何情况下,除非您明确希望您的ivar在课堂外可见(并且您几乎肯定不会),否则您应该使用后一种形式(在中指定@implementation).Ivars通常被认为是实现细节,因此不应该在标题中.

唯一的例外是如果你正在编写32位OS X代码,因为它仍然使用脆弱的ABI,它需要在中声明所有的ivars @interface.

  • 在.h文件中使用ivars意味着如果需要更改实现,则将重新编译包含.h的所有类.如果将它们放在.m中,则依赖类不会重新编译,并且您也可以更好地隐藏实现细节. (3认同)