我具有被這樣目標C圓形進口
SingletonClassA.h
@interface SingletonClassA : NSObject
+ (SingletonClassA*) sharedInstance;
@end
SingletonClassA.m
#import "SingletonClassA.h"
#import "SingletonClassB.h"
@implementation SingletonClassA
+ (SingletonClassA*) sharedInstance{
static SingletonClassA* instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [SingletonClassA];
[[SingletonClassB shareInstance] methodB];
});
return instance;
}
@end
SingletonClassB.h
定義了兩個單實例類@interface SingletonClassB : NSObject
+ (SingletonClassB*) sharedInstance;
@end
SingletonClassB.m
#import "SingletonClassB.h"
#import "SingletonClassA.h"
@implementation SingletonClassB
+ (SingletonClassB*) sharedInstance{
static SingletonClassB* instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [SingletonClassB];
[[SingletonClassA shareInstance] methodA];
});
return instance;
}
@end
當我生成項目,一切似乎是不錯的,但是當我在模擬器或我的手機上運行,應用程序未啓動並顯示NSZombie錯誤。
Class _NSZombie_BSXPCMessage is implemented in both ?? and ??.
One of the two will be used. Which one is undefined
我試圖刪除應用程序,清理項目並再次運行..相同的錯誤。 當我在兩個類中的一箇中刪除導入時,它工作正常。
你知道我做錯了什麼嗎?
謝謝,
這可能是因爲它是不可重入的'dispatch_once',問題在導入階段沒有那麼多的循環依賴。 –
是的,你可能是對的。但我能做些什麼來避免這種情況? –
基本上,改變設計,以便所有'sharedInstance'方法都是初始化靜態對象。當對象需要與其他對象交互時,請將其明確。 (「How」很大程度上取決於這些對象的用途以及'methodA' /'methodB'的作用。 –