web-dev-qa-db-ja.com

ARCの下のNSStringプロパティは強いのかコピーなのか?

ARCでコンパイルしない場合は、copyなどのデータ型にNSStringプロパティを使用することをお勧めします。 ARCモードでのcopyの使用に関する適切なドキュメントが見つかりませんでした。 ARCに適用できるものを誰か教えてもらえますか?

59
rustylepord

変更可能な文字列を渡して、知らないうちに変更するようなものを避けたいので、コピーすることをお勧めします。コピーは、お持ちの文字列が変更されないことを保証します。

77
Joe

コピーとARCは直交しています。変更可能なオブジェクトのコピーを作成して、その状態を「フリーズ」します。 ARCは、オブジェクトの参照カウントを追跡します。

NSStringオブジェクトは可変である場合とそうでない場合があります。 NSString*をパラメーターとして使用すると、型を確認しない限り不変であることを確認できません(その場合でも誤検知が発生する可能性があります)。アルゴリズムが、設定後に変更されない文字列に依存している場合、コピーを作成することが正しいことです。一方、ARCは、オブジェクトへの強い参照を保持している間、オブジェクトが解放されないようにします。

14
dasblinkenlight

copystrongとしてカウントされます。使用する:

@property(nonatomic、copy)NSString * name;

https://devforums.Apple.com/message/654033#6540

あるいは:

@property NSString * firstName;

http://developer.Apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/DefiningClasses/DefiningClasses.html#//Apple_ref/doc/uid/TP40011210-CH3-SW7

11
Snowcrash

[〜#〜] arc [〜#〜]またはnon-ARCを使用しているかどうかは関係ありません。

copyの背後にある理由は、クラスの内部状態が実装の外部から変更できないことを保証できるようにするためです。

これは、誰かがあなたにNSMutableStringを渡し、後でそれを変更した場合に発生する可能性があります。この考慮事項は、メモリ管理環境とは無関係です。

10
Matt Wilding