0

我试图理解一些我认为我知道的东西。

如果在 A 类我做:

-(NSMutableArray*)setArray:(NSMutableArray*) array1
{
//some calculations on array 1
  return array1.
}

classB我:

 ClassA *instanceA = [[ClassA alloc]init] ;
 ClassC *instanceC = [[ClassC alloc]init] ;
 [instanceC sendArray:[instanceA setArray:someArray] ]; //some array allocated in b
 [instanceA release];
 //in ClassC i have defined  arrayC ,that gets array as a pointer from classB

array1ClassC在我发布后是否仍然有效instanceA ?

对数组 in 所做的每一次更改都会ClassB对 arrayC 进行吗?

这是正确的工作方式吗?我的目标是控制arrayCinClassC所以我所做的每一个更改都ClassB将适用于 C 中的那个,并且不会因为某些autorelease.

用财产做这件事会更好吗?如何 ?

谢谢。

4

2 回答 2

1

在我发布 instanceA 后,array1 在 ClassC 中是否仍然有效?由于 array1 未在 A 类中分配,并且如果在 A 类中我们没有向 array1 发送释放消息,则 array1 将不会被释放,并且在释放实例 A 后将有效。

对 ClassB 中的数组所做的每一次更改都会对 arrayC 进行吗?由于 ClassB 和 ClassC 指的是相同的数组,因此对数组所做的更改会反映在两个类中。

于 2012-11-07T10:40:04.873 回答
0

这个问题有点不清楚,所以我猜测你想要理解的内容。

您问“对 ClassB 中的数组所做的每项更改是否也会对 arrayC 进行?”

答案是 B 类或 C 类都没有数组,而是它们都有对数组的引用。现在,如果 B 类和 C 类都持有相同的引用,那么通过 B 类中的该引用进行的更改在 C 类中通过它的引用可见 - 因为它们都引用同一个数组。复制引用不会复制数组、创建新数组或类似的东西,它只是复制引用。

如果这仍然令人困惑,请将数组引用视为房屋的地址。您可以在任意多的纸上写下房子的地址,然后将它们传递给任意数量的人,如果每个人都阅读了纸并前往该地址,他们最终都会在同一个房子里。如果其中一个人打破了房子里的一扇窗户,那么所有其他人都会看到破窗户 - 只有一所房子。

HTH,我没有回答完全错误的问题!

于 2012-11-07T09:38:25.447 回答