55

ARCを使用してコンパイルしない場合は、NSStringなどのデータ型にcopyプロパティを使用することをお勧めします。 ARCモードでのcopyの使用に関する適切な文書が見つかりませんでした。誰かがARCに適用可能なことを教えてもらえますか?ARCの下のNSStringプロパティは強くなければならないのでしょうか?

+0

?適切な方法を知りたい場合は、コードの例を示してください。 – Dustin

答えて

72

変更可能な文字列を渡すことを避けて、知らないうちに変更する必要があるため、コピーすることをお勧めします。コピーすると、あなたが持っている文字列は変更されません。

+9

「保証」と言うとき、私はObjective-Cのベストプラクティスに準拠したコードを指しています。 'NSString'カテゴリに' copy'メソッドを追加するのは賢明だと思う不正プログラマを考慮することはできません。 – Joe

+0

すごい説明マンです! –

+0

NSMutableArrayをコピーするにはどうすればいいですか? –

10

ARCまたは非ARCの場合は問題ありません。

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

これは、誰かがあなたにNSMutableStringを渡してから後で変更する場合に発生します。この考慮事項は、メモリ管理環境から独立しています。

13

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

NSStringオブジェクトは変更可能かどうかは関係ありません。 NSString*をパラメータとして受け取ると、その型をチェックしない限り、それが不変であるとは確信できません。あなたのアルゴリズムが設定された後に変化しない文字列に頼っているなら、コピーを作ることは正しいことです。一方、ARCは、オブジェクトを強く参照している間にオブジェクトが解放されないようにします。

10

copyは、strongとカウントする。使用:

@property(nonatomic、copy)NSString * name;

https://devforums.apple.com/message/654033#654033

かさえ:

@property NSStringの*のfirstName;何をしようとする

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

+0

最初のリンクにアクセスできません。誰かがリンク内の正確な投稿を引用できますか? – CyberMew

関連する問題