категория не может получить доступ к закрытым переменным экземпляра не может подклассом сделать это.
Поскольку у вас есть доступ к исходному коду и вы просто не хотите менять исходный код, вы можете создать другой класс с точно такой же структурой данных. (те же имена и типы переменных, которые указаны точно так же, как и последовательность).
@interface Shadowclass() {
NSMutableDictionary *viewControllers;
__weak UIViewController *rootViewController;
UIPageViewController *pageController;
}
@end
Затем добавить методы получения и установки для Shadowclass
, чтобы значения доступны.
Д.О.:
Someclass *someclass = ... // you get the object from somewhere somehow.
object_setClass(someClass, [ShadowClass class]);
Как SomeClass имеет тип ShadowClass, и вы можете получить доступ к геттер и сеттер. Честно говоря, я не уверен, как текущий компилятор позволяет напрямую получить доступ к геттерам, если вам разрешено отличать someClass
, теперь ShadowClass
, но вы можете использовать performSelector
для доступа к геттерам или сеттерам.
Доступность геттеров и сеттеров прямо как [shadowClass rootViewController:xxx]
может даже варьироваться независимо от того, используете ли вы ARC или нет. (Возможно, поведение компилятора даже может быть настроено. Это также я не знаю по деталям из головы.)
Однако я не уверен, действительно ли я рекомендую это! Вы можете найти менее «хакерские» альтернативы. И не стоит недооценивать важность создания точно такой же структуры для Shadowclass
как для Someclass
!
Обычно я не использую категории, поэтому не знаю. В этом руководстве есть все ответы, хотя http://rypress.com/tutorials/objective-c/categories – noobsmcgoobs