以下不是共享数据的最佳组织,但我仍然想知道为什么它不起作用..
SharedClass
在这个例子中不是一个单例,只是一个被传递的常规对象。
A 类有 ivar:
@property (nonatomic, retain) SharedClass*sharedClass;
B类和C类都有这个:
@property (nonatomic,assign) SharedClass*sharedClass;
(在这种情况下,“分配”可能是“保留”,我认为这对这个问题并不重要)
A 类在其初始化 ivar init
:
self.sharedClass=[[SharedClass new] autorelease]; // autorelease since it is retained
B 类在其 init 中不处理 ivar。相反,B 类在 A 类的 init 中实例化,并在之后传递一个引用,如下所示:
在 A 类
self.classB=[[ClassB new] autorelease];
self.classB.sharedClass=self.sharedClass; // passing a reference to same object; this is working as expected
这是我不明白的。C 类在 B 类中实例化,init
并且还传递了一个引用,但由于这是在 B 类从 A 类获取其对象之前发生的,所以它暂时为空,我希望:
B类:
self.classC=[[ClassC new] autorelease];
self.classC.sharedClass=self.sharedClass; //self.sharedClass is currently nil, thus so is self.classC.sharedClass
在 B 类在 A 类中实例化(因此 C 类也在 B 类中实例化)并且 A 类分配sharedClass
给 B 类之后,不应该这样涟漪,以便sharedClass
对象现在也可以在 C 类中使用吗?就因为它是nil,它仍然指向一个不再是nil的空间,对吧?
但是我发现如果在 A 类中处理进一步的步骤,C 类只能引用 sharedClass:
self.classB=[[ClassB new] autorelease];
self.classB.sharedClass=self.sharedClass;
self.classB.classC.sharedClass=self.sharedClass;//why is this necessary?