Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ios-两个同名的单例类';sharedObj';_Ios_Objective C_Singleton - Fatal编程技术网

ios-两个同名的单例类';sharedObj';

ios-两个同名的单例类';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”和“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

我想知道为什么会这样。两个对象的名称相同,但都是类级别的


谢谢。

您的共享实例变量必须在实现文件中声明为静态

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。没有重复错误。