Objective-C:如何防止抽象泄漏
-
23-09-2019 - |
题
我认为在 Objective-C 中,我必须将实例变量声明为类接口的一部分,即使这些变量是实现细节并且具有私有访问权限。
在“主观”C 中,我可以在 .c 文件中声明一个变量,并且它在该编译单元之外不可见。我可以在相应的 .h 文件中声明它,然后任何链接到该编译单元的人都可以看到该变量。
我想知道 Objective-C 中是否有等效的选择,或者我是否必须在 .h 中为我的类声明每个 ivar。
阿里。
解决方案
其他提示
在实例变量历来需要确定该类的大小。这一直是不良的做法直接访问实例变量,而不是重点。在现代运行,这是不太必要的,但无论如何,它不是一个抽象泄漏,除非客户端依靠类的实例变量,因为你声明为@protected
或@private
,右这应该是不可能的?
要限制访问,则可以使用@private
或@protected
关键字:
@interface Foo : NSObject {
@private
int barPrivate;
@protected
int barProtected;
@public
int barPublic;
}
@end
编辑: 便笺的一切,原来我真的需要一些睡眠的
高德是@protected
默认( - 与@private
你可以随时访问高德虽然@protected
和getValue:forKey:
不保证其他类不能访问它们)。你应该从其他类直接在任何情况下不能直接访问实例变量 - “选择”是,是否暴露实例变量的属性(你只需要依靠所有类的约定,以不高德的访问后直接)。
在新的Objective-C运行时,你不必在所有的现在申报的ivars,因为它们在运行时可以合成,但不幸的是不起作用的iPhone模拟器,因此,最好只是声明所有实例变量在.h文件。
不隶属于 StackOverflow