Как реализован @Private?
-
08-10-2019 - |
Вопрос
В 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;
};
Но я действительно понятия не имею. Кто-нибудь знает, как это было действительно сделано?
Решение
Эти модификаторы ничего не меняют о макете памяти вашего класса. Сам компилятор помнит, что Ивар является публичным, защищенным или частным и выделяет ошибки, если вы пытаетесь получить доступ к ним откуда-то неуместно. Все это сделано, прежде чем любой код генерируется и не влияет на сгенерированный код.
Не связан с StackOverflow