objective-c - @private 是如何实现的?

标签 objective-c code-generation private language-implementation

在 Objective-C 中,我很好奇如何实现实例变量的访问控制,如 @private@protected 等。

我曾考虑过像这样以某种方式生成单独的结构:

@interface Foo {
  int bar;
  @private
  int baz;
  @public
  int qux;
}

=> 类似于

struct Class_Foo_Protected {
  int bar;
};

struct Class_Foo_Private {
  int baz;
};

struct Class_Foo_Public {
  int qux;
};

但我真的不知道。有人知道这是怎么做到的吗?

最佳答案

这些修饰符不会改变类的内存布局。编译器本身会记住哪个 ivar 是公共(public)的、 protected 或私有(private)的,如果您尝试从不适当的地方访问它们,则会发出错误。这一切都在生成任何代码之前完成,并且不会影响生成的代码。

关于objective-c - @private 是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4352619/

相关文章:

xml - 没有 XML 绑定(bind)的 XSD 到 Delphi 类

C 代码 reshape 器

ios - addressDictionary 已弃用 : first deprecated in iOS 11. 0 - 使用@properties

iphone - 如何跨 View Controller 链接网点?

iphone - 从 nib 文件加载 View

ios - 将坐标字符串转换为浮点

c# - T4。错误 : An expression block evaluated as Null

c# - 在 .net 中隐藏私有(private)字段以防止反射

vba - 如何将对象插入作为用户修改类的字段的数组中? VBA

azure - 如何通过 VPN 设置与专用 AKS 的连接