在@implementation中添加ivars

时间:2012-01-13 16:12:05

标签: objective-c

为了获得良好的封装,体面的Objective-C程序员将他们的private ivars放在主实现文件中声明的私有extension中,如下所示:

// MyClass.m

@interface MyClass () {
    float value;
}
@end

@implementation MyClass
@end

但是最近,我找到了一种隐藏private ivars的简单方法:ivars可以在{}之后的@implementation块中声明,如下所示:

// MyClass.m

@implementation MyClass {
    float value;
}
@end

当没有私有方法但只需隐藏private个ivars时,这非常方便。

但是,我不确定它的语法有效性。任何人都可以通过一些规范的引用来验证或使其无效吗?

2 个答案:

答案 0 :(得分:11)

这是完全有效的,这是苹果公司谈论它的文件:

我不亲自使用它,因为我更喜欢类继续类别的语法。

答案 1 :(得分:3)

我也很好奇。 Here is the updated link from Apple

  

您可以定义没有属性的实例变量

     

最佳做法是在需要跟踪值或其他对象时随时在对象上使用属性。

     

如果确实需要定义自己的实例变量而不声明属性,可以将它们添加到类接口或实现顶部的大括号内,如下所示:

@interface SomeClass : NSObject {
    NSString *_myNonPropertyInstanceVariable;
}
...
@end

@implementation SomeClass {
    NSString *_anotherCustomInstanceVariable;
}
...
@end