我有两个单独的类,它们被定义为
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
我试图删除该应用,清理项目并再次运行..同样的错误。 当我在两个类中删除导入时,它可以正常工作。
你知道我做错了什么吗?
谢谢,
答案 0 :(得分:1)
无法重现您的问题。
<强> SingletonClassA.h 强>
@interface SingletonClassA : NSObject
+ (SingletonClassA *) sharedInstance;
-(void)methodA;
@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 new];
[[SingletonClassB sharedInstance] methodB];
});
return instance;
}
@end
<强> SingletonClassB.h 强>
@interface SingletonClassB : NSObject
+ (SingletonClassB *) sharedInstance;
-(void)methodB;
@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 new];
[[SingletonClassA sharedInstance] methodA];
});
return instance;
}
@end
在.m文件中导入类不应引入导入周期。您没有使用new
或alloc init
。那是为什么?