нет.
вам часто приходится обходить это с кластером классов, хранить частную реализацию или создавать фабрику объектов.тогда вы можете минимизировать зависимости между модулями.
вам все равно в конечном счете потребуется ссылка на библиотеку на каком-то этапе, если вы собираетесь ее использовать (например, создать экземпляр).
Обновление - демонстрация частных реализаций
Частные реализации могут быть полностью непрозрачными.Если вы их выставите, вот два способа реализовать частные реализации, которые видны клиентам:
через протокол:
// MONDrawProtocol.h
// zero linkage required
// needs to be visible to adopt
// may be forwarded
@protocol MONDrawProtocol
- (void)drawView:(NSView *)view inRect:(NSRect)rect;
@end
// MONView.h
@protocol MONDrawProtocol;
@interface MONView : NSView
{
NSObject<MONDrawProtocol>* drawer;
}
@end
// MONView.m
#include "MONDrawProtocol.h"
@implementation MONView
- (void)drawRect:(NSRect)rect
{
[self.drawer drawView:self inRect:rect];
}
@end
через базу:
// MONDrawer.h
// base needs to be visible to subclass and types which use MONDrawer
// may be forwarded
@interface MONDrawer : NSObject
- (void)drawView:(NSView *)view inRect:(NSRect)rect;
@end
// MONView.h
@class MONDrawer;
@interface MONView : NSView
{
MONDrawer * drawer;
}
@end
// MONView.m
#include "MONDrawer.h"
@implementation MONView
- (void)drawRect:(NSRect)rect
{
[self.drawer drawView:self inRect:rect];
}
@end