4

在 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;
};

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

4

1 回答 1

7

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

于 2010-12-04T08:24:11.763 回答