目标C中的私人课程

Ove*_*esh 32 oop objective-c

我想在Objective C中为嵌套的私有类创建一个模式.

要求是:

  • 其他类不可见/可访问类.
  • class可以执行方法(即不是C结构)
  • 包含类成员对嵌套类是可见/可访问的

考虑到这些意见,我正在简化要求:

  • 内部类可以被其他类访问,但不可见(类似于使用类别来隐藏私有方法).
  • 内部类不必嵌套

它仍然不可能吗?

bbu*_*bum 86

Objective-C没有正式声明方式的私有类或私有实例变量的概念.

相反,Objective-C中的可见性完全由您声明某些内容的位置控制.如果它在头文件中,则可以通过其他内容导入.如果它在实现文件中声明,则不能(合理地)导入它,因此对该编译单元实际上是私有的.

而对于"它",我的意思是几乎所有可以宣布的东西; 班级,全球等...

即如果你@interface/@implementation在一个.m文件中为一个类添加一对,那么该类实际上是该编译单元的私有.当然,如果没有名称空间,请确保该类具有唯一名称.


考虑一下:

foo.h中:

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

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
Run Code Online (Sandbox Code Playgroud)

这为您提供了一个隐私可见的支持类,仅在您的实现中可用,您的类上的实例变量和setter/getter方法在编译单元外部也是不可见的.

(注意,Objective-C有"实例变量",而不是"成员变量".它们是相似的,但你最好使用该语言的词汇.)