我的单件类
中有以下代码static MySingleton *gManager;
+(void)initialize
{
if(self == [MySingleton class])
{
gManager = [[MySingleton alloc] initWithServices:[[MyServices alloc] init]];
}
}
+(MySingleton *)sharedInstance
{
return (gManager);
}
不幸的是,在单元测试期间,我看到gManager是SenTestCaseRun类型的实例。我似乎无法弄清楚为什么? 所以一个电话就好 [[MySingleton sharedInstance] myFunction];
导致myFunction是一个未知选择器的错误,尽管它存在于MySingleton类中。
它是SenTestCaseRun类型,因为我使用NSStringFromClass函数进行了检查。
任何指针?已经在这上面打了3-4个小时:(。
答案 0 :(得分:1)
将初始化代码放在共享实例方法
中可能更好+(MySingleton *)shared
{
static MySingleton *sharedInstance = nil;
if(sharedInstance == nil){
sharedInstance = [[MySingleton alloc] init];
}
return sharedInstance;
}
同样在你的代码中你将一个对象与一个永远不会是真的类进行比较,而不是将[self class]与[MySingleton类]进行比较。
答案 1 :(得分:0)
在+initialize
中放置断点以确保正确设置此变量。如果这不能解释它,请在其上使用watchpoint来查看谁正在修改它。