为了获得良好的封装,体面的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时,这非常方便。
但是,我不确定它的语法有效性。任何人都可以通过一些规范的引用来验证或使其无效吗?
答案 0 :(得分:11)
这是完全有效的,这是苹果公司谈论它的文件:
我不亲自使用它,因为我更喜欢类继续类别的语法。
答案 1 :(得分:3)
我也很好奇。 Here is the updated link from Apple:
您可以定义没有属性的实例变量
最佳做法是在需要跟踪值或其他对象时随时在对象上使用属性。
如果确实需要定义自己的实例变量而不声明属性,可以将它们添加到类接口或实现顶部的大括号内,如下所示:
@interface SomeClass : NSObject { NSString *_myNonPropertyInstanceVariable; } ... @end @implementation SomeClass { NSString *_anotherCustomInstanceVariable; } ... @end