1
在静态库中,我有两个类A,B继承自NSObject。我想在B的某些方法中创建A的对象。用户应该只能通过B访问A的引用,并且只应创建A和B的单个对象。用户在他们的Xcode项目中添加静态库后,他们不应该直接创建A的对象,因此我在A的init中引发了一个异常。但是,在完成此操作后,我无法创建A的对象在B也。我不想创建A的共享实例,它允许库用户在创建B之前访问A.我的主要目标是创建一个内部B的对象,只是创建后,B和用户应该能够通过对B如何通过阻止A从A直接访问来从B的方法内部创建单例对象A?
@implementation A
//This will prevent library user to create A
- (instancetype)init {
[self doesNotRecognizeSelector:_cmd];
return nil;
}
@implementation B
- (void)initialiseSDK{
A *a = [B sharedA]; //won't work, A's init raises exception
+ (A *)sharedA{
static dispatch_once_t d;
static OncamAccount *sharedA = nil;
dispatch_once(&d, ^{
sharedA = [[A alloc]init]; //A's init raise exception
});
return shared;
}
+ (B *)sharedB{
static dispatch_once_t pred;
static OnCamSDK *sharedB = nil;
dispatch_once(&pred, ^{
sharedB = [[B alloc] init];
});
return sharedB;
}
的属性来访问的目的。如果我从A的init删除异常,那么我认为用户可以直接创建A的对象,这是我不想要的。
你可以创建一个你不公开的'init'的变体,像'initForB'一样保留当前'init'。有人想打电话给这个新人可能会想出来,但是,如果你只是试图阻止偶然/意外使用,它可以工作。 (如果你想阻止Objective-C“黑客”会更困难。) –
检查这个答案:http://stackoverflow.com/questions/12000571/how-can-i-make-it-private-成员或类的方法,所以它可以被访问它接近你在说什么。基本上处理静态库中的私有类。 – Putz1103
@PhillipMills如果我没有在A中公开使用initForB,我将如何在B中访问它,因此我将如何从B创建A. –