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

ClassCリリース後もarray1は有効なままですかinstanceA ?

配列に加えられたすべての変更はClassB、 arrayC にも加えられますか?

これは正しい働き方ですか?私の目標は、 in を制御して、arrayCin でClassC行ったすべての変更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に表示されます。どちらも同じ配列を参照しているためです。参照をコピーしても、配列がコピーされたり、新しい配列が作成されたりすることはなく、参照がコピーされるだけです。

それでも混乱する場合は、配列参照を家の住所と考えてください。家の住所を好きなだけ紙に書き留めて、好きなだけ人に渡すことができます。一人一人が紙を読んでその住所に行くと、全員が同じ家に行き着きます。それらの人々の1人が家の窓を壊した場合、他のすべての人々は壊れた窓を見る-家は1つしかない。

HTHと私は完全に間違った質問に答えていません!

于 2012-11-07T09:38:25.447 に答える