4

文字列に保持またはコピーを使用する問題について、ここでいくつかの投稿を見てきました。違いや重要性については、まだよく理解できていません。

私の場合、現時点では、文字列を保持するための nsstrings の全負荷を持つクラスがあります。

このクラスを 1 回だけインスタンス化し、その nsstring 変数を、テーブル ビューでクリックされたインデックスに応じて変更したいと考えています。

保持を使用することを選択した場合、テーブルビューのクリックで値を設定するたびに nsstrings が上書きされ、コピーを選択した場合、各文字列のインスタンスが 2 つあると言うのは正しいでしょうか....?

すみません……よくわかりません

4

1 に答える 1

6

これは、可変オブジェクトと不変オブジェクトのコピーに関する質問です。NSString オブジェクトは不変であるため (内容を変更することはできません)、次のように -copy を実装します。

- (id) copyWithZone: (NSZone *) zone
{
    return [self retain];
}

考えてみれば、不変オブジェクトを複製する理由はありません。それはメモリの無駄だからです。一方、NSMutableString オブジェクトは、存続期間中に内容が変化するのを見ることができるため、NSMutableString のコピーを要求すると、別のオブジェクトである実際のコピーが取得されます。

文字列が NSMutableStrings でない場合、保持するかコピーするかは問題ではありません。ただし、後でコードをリファクタリングして NSMutableStrings を使用する場合は、適切な方法を選択することが重要です。一般的なロジックは、次の質問に答える必要があります。コンテンツが外部で変更される可能性のあるオブジェクトを取得した場合、どの値が必要ですか? 多くの場合、コピーを作成したいと思うでしょう。

于 2010-02-19T10:11:59.573 に答える