我认为在 Objective-C 中,我必须将实例变量声明为类接口的一部分,即使这些变量是实现细节并且具有私有访问权限。

在“主观”C 中,我可以在 .c 文件中声明一个变量,并且它在该编译单元之外不可见。我可以在相应的 .h 文件中声明它,然后任何链接到该编译单元的人都可以看到该变量。

我想知道 Objective-C 中是否有等效的选择,或者我是否必须在 .h 中为我的类声明每个 ivar。

阿里。

有帮助吗?

解决方案

阿里,

关于如何完成“不可见”实例变量声明的一个很好的参考可以 可以在这里找到 谨此致谢马特·加拉格尔 (Matt Gallagher)。

希望它有帮助,弗兰克

其他提示

在实例变量历来需要确定该类的大小。这一直是不良的做法直接访问实例变量,而不是重点。在现代运行,这是不太必要的,但无论如何,它不是一个抽象泄漏,除非客户端依靠类的实例变量,因为你声明为@protected@private,右这应该是不可能的?

要限制访问,则可以使用@private@protected关键字:

@interface Foo : NSObject {
    @private
    int barPrivate;

    @protected
    int barProtected;

    @public
    int barPublic;
}
@end

编辑: 便笺的一切,原来我真的需要一些睡眠

高德是@protected默认( - 与@private你可以随时访问高德虽然@protectedgetValue:forKey:不保证其他类不能访问它们)。你应该从其他类直接在任何情况下不能直接访问实例变量 - “选择”是,是否暴露实例变量的属性(你只需要依靠所有类的约定,以不高德的访问后直接)。

在新的Objective-C运行时,你不必在所有的现在申报的ivars,因为它们在运行时可以合成,但不幸的是不起作用的iPhone模拟器,因此,最好只是声明所有实例变量在.h文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top