Objective c 在多个类中共享对同一对象的引用作为多个IVAR

Objective c 在多个类中共享对同一对象的引用作为多个IVAR,objective-c,Objective C,以下不是共享数据的最佳组织,但我仍然想知道为什么它不起作用 SharedClass在本例中,它不是一个单例对象,只是一个被传递的常规对象 A类有ivar: @属性(非原子,保留)SharedClass*SharedClass B类和C类都有: @property(非原子,赋值)SharedClass*SharedClass (本例中的“分配”可以是“保留”,我认为这与这个问题无关) 类A在其init中初始化ivar: self.sharedClass=[[sharedClass新建]自动释放];

以下不是共享数据的最佳组织,但我仍然想知道为什么它不起作用

SharedClass
在本例中,它不是一个单例对象,只是一个被传递的常规对象

A类有ivar:

@属性(非原子,保留)SharedClass*SharedClass

B类和C类都有:

@property(非原子,赋值)SharedClass*SharedClass

(本例中的“分配”可以是“保留”,我认为这与这个问题无关)

类A在其
init
中初始化ivar:

self.sharedClass=[[sharedClass新建]自动释放];//保留后自动释放

类B不在其init中处理ivar。相反,类B在类A的init中实例化,然后传递一个引用,如下所示:

A班

self.classB=[[classB new]autorelease];
self.classB.sharedClass=self.sharedClass;//传递对同一对象的引用;这正按预期工作

这是我不明白的。类C在类B的
init
中实例化,并且还传递了一个引用,但由于这是在类B从类a获取其对象之前发生的,所以它暂时为null,我希望:

B类:

self.classC=[[classC new]autorelease];
self.classC.sharedClass=self.sharedClass//self.sharedClass当前为零,因此self.classC.sharedClass也为零

在类B在类A中被实例化(因此类C也在类B中被实例化)并且类A将
sharedClass
分配给类B之后,这不应该影响到类C中的
sharedClass
对象吗?仅仅因为它是零,它仍然指向一个现在不再是零的空间,对吗

但是,我发现,如果在类a中处理进一步的步骤,则类C只能引用sharedClass:

self.classB=[[classB new]autorelease];
self.classB.sharedClass=self.sharedClass;

self.classB.classC.sharedClass=self.sharedClass//为什么必须这样做?

如果分配给您的
self.sharedClass
nil

self.classC.sharedClass = self.sharedClass;
然后,
self.classC.sharedClass
也是
nil
,以后分配给
self.sharedClass
不会改变这一点

只是因为它是零,它仍然指向一个空间,现在是 不再是零,对吗


这是错误的,
nil
是一个“空对象”,不指向任何地方。

SharedClass
一个单例吗?(我想不是)不,不是。只是传递一个常规对象(同样,这不是组织应用程序的最聪明的方式,但我希望它无论如何都能工作)