我想在Objective C中使用嵌套私有类的模式。
要求是:
考虑到这些评论,我正在简化要求:
还不可能吗?
答案 0 :(得分:86)
Objective-C没有正式声明方式的私有类或私有实例变量的概念。
相反,Objective-C中的可见性完全由您声明内容的位置控制。如果它在头文件中,则可以通过其他内容导入。如果它在实现文件中声明,则不能(合理地)导入它,因此对该编译单元实际上是私有的。
通过“它”,我的意思是几乎任何可以宣布的东西;班级,全球等...
即。如果你在@interface/@implementation
文件中为一个类粘贴.m
对,那么该类实际上是该编译单元的私有。当然,如果没有名称空间,请确保该类具有唯一名称。
考虑一下:
foo.h中:
@interface Foo: NSObject
... public interface
@end
Foo.m:
@interface __FooSupportClass: NSObject
... interface here ...
@end
@implementation __FooSupportClass
@end
@interface Foo()
@property(retain) __FooSupportClass *__fooSupport;
@end
@implementation Foo
@synthesize __fooSupport = fooSupport__;
... etc ...
@end
它为您提供了一个隐私可见的支持类,仅在您的实现中可用,您的类上的实例变量和setter / getter方法在编译单元外部也是不可见的。
(请注意,Objective-C有“实例变量”,而不是“成员变量”。它们是相似的,但你最好使用该语言的词汇表。)
答案 1 :(得分:1)
你可以拥有“半隐藏”的私人方法。您可以包含一个接口文件,该接口文件提供实现文件中的扩展方法,然后只实现在那里声明的方法。我之前对此感到好奇,并提出了类似的问题。