0
   NSString *string=[temp objectAtIndex:row];
   [temp removeObjectAtIndex:row];

作成元のオブジェクトstringはもう存在しません。この構文はまっすぐな割り当てだと思いますのでstring、もう存在しないはずですよね?

したがってstringWithFormat、オブジェクトから新しい文字列を作成するために使用するか、安全のために送信retainするかのどちらかstringですが、これは正しい理由ですか?

4

1 に答える 1

2

ARCまたはガベージコレクションを使用していないと仮定すると、はい、オブジェクトのメモリ管理に関する推論は正しいです†。ただし、は使用したくないでしょうstringWithFormat:。これはフォーマット文字列を想定しており、特に1つであることが意図されていないものを渡すと、ひどく失敗する可能性があります。次のいずれかを使用できます。

  • stringWithString:所有権が必要ない場合

  • copy文字列への安全な参照があることを確認したい場合(オプションでautorelease、参照を長期間保持する予定がない場合)

  • retain間違いなく同じオブジェクトを保持したい場合(変更可能な文字列であっても)、所有権が必要な場合(主な違いcopyは、文字列が潜在的にあなたの下で変更される可能性があるため、このオプションはおそらく必要ないでしょう)

†「正しい」とは、その時点を超えてオブジェクトのライフサイクルについて何も想定してはならないということです。それはまだ生きているかもしれませんが、技術的には安全な仮定ではありません。この点について100%明確ではない人もいるので、言及する価値があると思いました。

于 2012-08-07T08:19:32.243 に答える