Есть ли способ создать что-то вроде классов друзей в Objective-C?
Классы друзей в Objective-C
Ответ 1
Сначала объявите "частное свойство" с использованием стандартного метода расширения класса:
// VisualNotePlayer.h
@interface VisualNotePlayer : NSObject<NotePlayer>{
@private
UIView *_currentView;
}
// VisualNotePlayer.m
@interface VisualNotePlayer()
@property (nonatomic, retain) UIView *currentView;
@end
@implementation VisualNotePlayer
@synthesize currentView=_currentView;
...
@end
Затем воссоздайте свойства в категории:
// VisualNotePlayer+Views.h
@interface VisualNotePlayer(Views)
@property (nonatomic, retain) UIView *currentView;
@end
Этот интерфейс доступен только тем, кто импортирует VisualNotePlayer+Views.h
Ответ 2
В ObjC нет такой вещи, как класс друга.
И для доступа к частной переменной другого класса вам даже не нужно объявлять как друга. Например, вы можете использовать функции времени выполнения
id the_private_ivar;
object_getInstanceVariable(the_object, "_ivar_name", &the_private_ivar);
чтобы получить the_object->_ivar_name
, минуя проверки компилятора.