単純な質問ですが、いつretainを使うのではなくcopyを使うべきですか?私はインターネットから見ようとしましたが、それほど得られませんでした。だから誰かが私を明るくすることができますか?目的Cのコピーと保持
7
A
答えて
27
オブジェクトの状態を保証する場合は、copy
を使用します。
NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString retain];
[mutString appendString:@"Test"];
この時点では、第3行目のところでbがうんざりしていました。
NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString copy];
[mutString appendString:@"Test"];
この場合、bは元の文字列であり、3行目で変更されません。
これは、すべての変更可能なタイプに適用されます。
+4
多くの不変型は、-retainを呼び出すことによって-copyを実装することに注意する価値があります。その価値は決して変化しないので、メモリに2つのコピーがあるという意味はありません。つまり、特定のオブジェクトが変更可能かどうかわからないかのように、さらに情報がなくても、常にコーディングする必要があります。 NSStringがNSMutableStringを渡すことを意味するわけではありません。 – ipmcc
3
コピーは、受け取った値がわからなくても変更されることを望まない場合に便利です。たとえば、NSString
のプロパティを持っていて、その文字列が一度変更されていない場合は、コピーを使用する必要があります。そうでなければ、誰かがあなたにNSMutableString
を渡して値を変更すると、NSString
の基礎となる値が変更されます。 NSArray
とNSMutableArray
と同じことは、配列のコピーは新しい配列へのすべてのポインタ参照をコピーするだけですが、エントリの削除や追加はできません。
7
関連する問題
- 1. 目的cメモリと可変コピー
- 2. ビューコントローラのデータ保持目的-cについて
- 3. Objective cの保持とコピーについての質問
- 4. 保持とコピーの違いは?
- 5. 目的CとOSのユーザタイプ
- 6. 目的C:インラインで割り当てられたオブジェクトの保持/解放
- 7. 目的のC
- 8. 目的C NSAutoreleasePoolとリリース
- 9. 目的Cメソッドと構文
- 10. シングルトンの目的C
- 11. 目的C:ドロップエリア
- 12. 目的C tip?
- 13. 目的C、メモリリーク?
- 14. 目的C IBOutlets
- 15. キーボードイベント目的C
- 16. 目的Cソケットプログラミング
- 17. 目的C init
- 18. 目的C:スコアカウンター
- 19. 目的Cのメソッドシグネチャと同等のコード
- 20. 目的C - enumのゲッターとセッターのプロパティ
- 21. windowsとgcc上の目的のC
- 22. オーディオファイルの位置を保存する方法は?目的 - C
- 23. UISwitchの状態を保存する - 目的C
- 24. 目的地Cのアドレッシングとポインタ
- 25. 目的C:サーバーからのアップロードとダウンロード
- 26. 目的C - iPadとiPhoneのワンストーリーボード
- 27. Objective-c - カテゴリとプロトコルの目的
- 28. 目的のCとピアツーピア通信
- 29. エラー目的C forControlEvents
- 30. 目的Cキーワード 'in'
[NSStringプロパティ:コピーまたは保持?](http://stackoverflow.com/questions/387959/nsstring-property-copy-or-retain)または[Objective C Assign Copy Retain](http: (http://stackoverflow.com/questions/6416963/)または[いつ使用するといつコピーを使用する](http:// stackoverflow .com/questions/4087208 /)または[@property:Retain or copy?](http://stackoverflow.com/questions/5616170/)または[その他多数](http://stackoverflow.com/search?q= 012BHC%5D + copy + retain) –
この質問の防衛では、他はすべてプロパティの種類に固有ですが、はい、この質問には多くの質問があります。 –