gpt4 book ai didi

objective-c - Objective C 中的私有(private)类

转载 作者:太空狗 更新时间:2023-10-30 03:08:55 24 4
gpt4 key购买 nike

我想要 Objective C 中的嵌套私有(private)类的模式。

要求是:

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

考虑到评论,我正在简化要求:

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

还是不行吗?

最佳答案

Objective-C 在正式的声明方式中没有私有(private)类或私有(private)实例变量的概念。

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

我所说的“它”是指几乎所有可以声明的东西;类、全局等...

即如果您在 .m 文件中为某个类粘贴 @interface/@implementation 对,则该类实际上是该编译单元私有(private)的。当然,如果没有 namespace ,请确保该类的名称是唯一的。


考虑一下:

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

这为您提供了一个 private-by-visibility 支持类,仅在您的实现中可用,您的类上有一个实例变量和 setter/getter 方法,这些方法在编译单元之外也不可见。

(请注意,Objective-C 有“实例变量”,而不是“成员变量”。它们很相似,但您最好使用该语言的词汇表。)

关于objective-c - Objective C 中的私有(private)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7682673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com