Если у вас есть свойство или метод, который является частным, но вы хотите сделать доступными для подклассов можно положить, что в category:
@interface A (AProtected)
@property (nonatomic, readwrite) NSObject *trickyObject;
@end
Вы можете поставить эту категорию в своем собственном .h
файле (например, ASubclass.h
). И оба A.m
и B.m
могут #import
этот .h
файл и пользуются trickyObject
.
У вас не может быть ivars в категориях, но вы можете определить свойство для этого ivar и, следовательно, иметь доступ к нему в любых классах, использующих эту категорию.
Какао пример этого рисунка UIKit/UIGestureRecognizerSubclass.h
. Если вы хотите увидеть его, выберите «Открыть Быстро ...» из меню Xcode «Файл» (или нажмите сдвиг + команда + O, буква «о», а не ноль) и поиск UIGestureRecognizerSubclass
, Это категория, которая предоставляет методы и свойства, которые будет использовать только подкласс UIGestureRecognizer
.
Если 'trickyObject' является общедоступным, вы можете. Но это действительно плохая практика, чтобы разоблачить иваров для других классов. Он разрушает инкапсуляцию и нарушает несколько объектно-ориентированных правил проектирования. – rmaddy
Я не уверен в природе вашего вопроса; хотите ли вы предоставить доступ к ivar вашего _own_ базового класса в унаследованном экземпляре, или вы хотите, чтобы другие классы получали доступ к своим иварам, которые они не являются общедоступными? – holex
@holex, я хочу _hack_ других классов (в этом примере, класс 'A') из библиотеки. –