在@implementation中添加ivars

an0*_*an0 11 objective-c

为了良好的封装,不错的Objective-C程序员将他们的privateivars放在extension主实现文件中声明的私有中,如下所示:

// MyClass.m

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

@implementation MyClass
@end
Run Code Online (Sandbox Code Playgroud)

但最近,我发现了一种隐藏privateivars 的简单方法:ivars可以在一个{}块中声明@implementation,如下所示:

// MyClass.m

@implementation MyClass {
    float value;
}
@end
Run Code Online (Sandbox Code Playgroud)

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

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

mat*_*way 11

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

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