@interface或@implementation中的私有ivar

Yev*_*niy 22 visibility objective-c instance-variables

是否有理由申报私人伊娃@interface而不是@implementation

我在整个互联网上看到这样的代码(包括Apple提供的文档):

foo.h中

@interface Foo : NSObject {
@private
    id _foo;
}
@end
Run Code Online (Sandbox Code Playgroud)

Foo.m

@implementation Foo
// do something with _foo
@end
Run Code Online (Sandbox Code Playgroud)

头文件定义了一个类的公共接口,而一个私有的ivar是...... well ... private.那么为什么不这样声明呢?

foo.h中

@interface Foo : NSObject
@end
Run Code Online (Sandbox Code Playgroud)

Foo.m

@implementation Foo {
@private
    id _foo;
}

// do something with _foo
@end
Run Code Online (Sandbox Code Playgroud)

CRD*_*CRD 24

声明实例变量@implementation是Obj-C的最新功能,这就是为什么你会看到很多带有它们的代码@interface- 没有别的选择.

如果您正在使用支持在实现中声明实例变量的编译器来声明它们,则可能存在最佳默认值 - 只有在需要其他人访问时才将它们放在接口中.

编辑:附加信息

在实现声明实例变量隐藏(有效私营)和能见度不能被改变- @public,@protected@private没有(至少目前锵)产生编译器错误,但被忽略.