Вопрос

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

Но я действительно понятия не имею. Кто-нибудь знает, как это было действительно сделано?

Это было полезно?

Решение

Эти модификаторы ничего не меняют о макете памяти вашего класса. Сам компилятор помнит, что Ивар является публичным, защищенным или частным и выделяет ошибки, если вы пытаетесь получить доступ к ним откуда-то неуместно. Все это сделано, прежде чем любой код генерируется и не влияет на сгенерированный код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top