2015-07-06 5 views
2

У меня есть класс A, который имеет это заявление в его .m файла:Доступ Ивар из подкласса в Objective-C

@implementation A { 
    NSObject *trickyObject; 
} 

И класс B, который имеет это заявление в его .h файла:

@interface B : A 
@end 

Есть ли возможность получить доступ к trickyObject из метода, объявленного в классе B?

+1

Если 'trickyObject' является общедоступным, вы можете. Но это действительно плохая практика, чтобы разоблачить иваров для других классов. Он разрушает инкапсуляцию и нарушает несколько объектно-ориентированных правил проектирования. – rmaddy

+0

Я не уверен в природе вашего вопроса; хотите ли вы предоставить доступ к ivar вашего _own_ базового класса в унаследованном экземпляре, или вы хотите, чтобы другие классы получали доступ к своим иварам, которые они не являются общедоступными? – holex

+0

@holex, я хочу _hack_ других классов (в этом примере, класс 'A') из библиотеки. –

ответ

1

Если у вас есть свойство или метод, который является частным, но вы хотите сделать доступными для подклассов можно положить, что в 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.

 Смежные вопросы

  • Нет связанных вопросов^_^