在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是公共,受保护或私人的,并发出错误。这一切都是在生成任何代码之前就完成的,并且不会影响生成的代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top