我添加了两个单例类'A'和'B'。
A具有对象字符串a1;
A *sharedObject;
+(A*)getSharedObject{
if(sharedObject == nil)
{
sharedObject = [[A alloc]init];
sharedObject.a1 = @"A obj";
}
return sharedObject;
}
B有对象字符串b1;
B *sharedObject;
+(B*)getSharedObject{
if(sharedObject == nil)
{
sharedObject = [[B alloc]init];
sharedObject.b1 = @"B obj";
}
return sharedObject;
}
我用过
A *aObj = [A getSharedObject];
NSLog(@"%@",aObj.a1);
B *bObj = [B getSharedObject];
NSLog(@"%@",bObj.b1);
崩溃说bObj是'A'类型并且没有对象b1。
然后我给出了不同的名字sharedObectA
和sharedObjectB
。
我需要知道为什么会这样。两个对象具有相同的名称但是是类级别的。
感谢。
答案 0 :(得分:0)
您的共享实例变量必须在实现文件中声明为static。
static A* sharedObject;
@implementation
+(A*)getSharedObject
{
if(!sharedObject)
{
sharedObject=[[A alloc] init];
}
return sharedObject;
}
//...
@end
要更安全地创建共享实例,请使用dispatch_once片段。
答案 1 :(得分:0)
如果您已在一个简单的实现文件(.m)中添加了所有这些代码,则不会声明A类方法或B类方法。你在实现语句中声明了类的方法:在你的类中看看:@implementation ThisIsYourClass。 ThisIsYourClass是clas方法,两者都是相同的。 在Objective C中,方法是选择器(内部和外部),在你的情况下两者都是相同的选择器, @selector(getSharedObject)。事实上,你应该用重复的方法发出重大警告。 在运行时调用此选择器时,始终是第一个。