2

重複の可能性:
NSString @property、retain の代わりに copy を使用

以下のような基本的なメモリ管理の問題があります。

NSString *someName = [NSString stringWithFormat:@"Chris"];
Person *p = [[Person alloc] init];
p.name = someName;

「名前」が「保持」に設定されている場合、「someName」は一度自動解放され、一度保持されることがわかっているため、「p.name」は NSString を 1 つの保持カウントで保持します。

しかし、「名前」がコピーに設定されている場合はどうでしょうか。「someName」は「p.name」に自分自身のコピーを渡しますが、そのコピーは自動解放されますよね?では、「someName」を明示的に保持する必要がありますか?

4

2 に答える 2

1

いいえ、copy はコピーを返す前にそのコピーを自動解放しません (別の言い方をすれば、所有しているオブジェクトを返します)。もしそうなら、プロパティのコピーはまったく価値がありませんね。

于 2012-05-25T02:49:09.437 に答える
1

次のいずれの場合も解放する必要はありませんsomeName。コピーは独立したオブジェクトになります。その作成はオリジナルの参照カウントをインクリメントしません。

someName保持すると、投稿で説明した方法とまったく同じように参照カウントが増加します。

于 2012-05-25T02:49:20.600 に答える