4

@privateObjective-C では、 、 などのインスタンス変数のアクセス制御がどのように実装されているのか興味@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 が public、protected、private のいずれであるかを記憶しており、不適切な場所からそれらにアクセスしようとするとエラーが発生します。これはすべて、コードが生成される前に行われ、生成されたコードには影響しません。

于 2010-12-04T08:24:11.763 に答える