0

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

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?

4

1 回答 1

1

如果self.sharedClassnil你的任务中

self.classC.sharedClass = self.sharedClass;

thenself.classC.sharedClass也是nil,并且将某些内容分配给self.sharedClasslater 并不会改变这一点。

就因为它是nil,它仍然指向一个不再是nil的空间,对吧?

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

于 2012-09-11T11:21:14.060 回答