0

オブジェクトへの参照を保持するために、オブジェクトcで可変配列を作成しようとしています。配列内のオブジェクトは、ユーザーの操作によって定期的に更新されます。オブジェクトに加えられた変更が発生したときに、配列に自動的に反映させたいと考えています。これを行う方法があるかどうか誰かが知っていますか?おそらく、配列内のオブジェクト自体ではなく、オブジェクトへのポインタを格納しますか?どんな助けでも大歓迎です

前もって感謝します

編集:オブジェクトは、厳密な意味で正確に更新されているわけではないことに注意してください。それらは再初期化されています。たとえば、私がコントローラーを持っていた場合:

MyController = [MyController alloc] initWith .....]]

上記の呼び出しは、異なるinitパラメーターを使用して再度行われます。

4

2 に答える 2

4

配列は常にポインタを格納します。配列はそれへの強力な参照を保持するか、保持メッセージを送信します(非ARCを使用している場合)。

それで

[myMutableArray addObject: anObject];

それにポインタを追加します。

ここでanObjectのプロパティを変更し、後で配列を介してアクセスすると、プロパティが変更されたそのオブジェクトへのポインタが提供されます。

編集:

いいえ、alloc / initを実行すると、新しいオブジェクトインスタンスが作成され、ヒープ上でそのインスタンスに新しいメモリが割り当てられます(つまり、新しいメモリアドレスへの別のポインタになります)。正確に何を達成しようとしていますか?もう少し詳細を提供すれば、確かに方法があります。

同じクラスでオブジェクトを割り当て/初期化する場合は、オブジェクトのプロパティを変更するメソッドを作成してみませんか。

それ以外の

myObject = [[MyClass alloc] initWithParameter1: one parameter2: two];

これらのプロパティを変更するメソッドを作成できます。

[myObject updateParameter1: anotherOne parameterTwo: anotherTwo];

そしてもちろん、可変配列の利点は、その内容を変更できることです。そのため、@ Eli Gregoryが指摘したように、オブジェクトを別のオブジェクト(またはオブジェクトへのポインター)に置き換えることができます。

于 2012-12-05T20:56:53.473 に答える
0

新しく割り当てられて初期化されたオブジェクトをポイントしたいので、ポインタを「更新」することはできません。できることは、特定のインデックスでポインタを新しいものに「置き換える」ことです。

これを行うために使用できる方法は次のとおりです。

- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject

したがって、次のようになります。

NewViewController *new = [[NewViewController alloc] init..];
[myArray replaceObjectAtIndex:x withObject:new];
于 2012-12-05T21:13:59.287 に答える