ios-两个同名的单例类';sharedObj';
我添加了两个单例类“A”和“B” A具有对象字符串a1ios-两个同名的单例类';sharedObj';,ios,objective-c,singleton,Ios,Objective C,Singleton,我添加了两个单例类“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*)g
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
我想知道为什么会这样。两个对象的名称相同,但都是类级别的
谢谢。您的共享实例变量必须在实现文件中声明为静态
static A* sharedObject;
@implementation
+(A*)getSharedObject
{
if(!sharedObject)
{
sharedObject=[[A alloc] init];
}
return sharedObject;
}
//...
@end
要更安全地创建共享实例,请使用dispatch_once snippet。如果您已在简单实现文件(.m)中添加了所有这些代码,则不会声明和a类方法或和B类方法。您正在实现语句中声明该类的方法:在您的类中,请查看:@implementation ThisIsYourClass。 A ThisIsYourClass clas方法,两者都是相同的。 在目标C中,方法是选择器(内部和外部),在您的情况下,两者都是相同的选择器, @选择器(getSharedObject)。事实上,对于重复的方法,应该有一个很大的警告。
在运行时调用此选择器时,始终是第一个选择器。每个类中的
sharedObject
的作用域是什么?听起来像是你把它声明为一个globalI把它分别声明为class a和class B。在实施之前。所以应该是班级层面的。或者这个对象是全局的吗?这是规范的单例实现——请注意,共享实例应该是类方法中的静态变量。否。有单独的类别A和B。没有重复错误。