Занятия с друзьями в Objective-C - PullRequest
18 голосов
/ 11 февраля 2010

Есть ли способ создать что-то вроде классов друзей в Objective-C?

Ответы [ 2 ]

30 голосов
/ 11 февраля 2010

Сначала объявите «частную собственность», используя стандартный метод расширения класса:

// 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

5 голосов
/ 11 февраля 2010

В ObjC нет такого понятия, как класс друзей.

И для доступа к закрытой переменной другого класса вам даже не нужно объявляться другом. Например, вы можете использовать функции времени выполнения

id the_private_ivar;
object_getInstanceVariable(the_object, "_ivar_name", &the_private_ivar);

для получения the_object->_ivar_name, минуя проверки компилятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...