61

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

4

4 に答える 4

81

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

于 2012-06-28T17:16:14.210 に答える
14

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

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

于 2012-06-28T17:16:43.443 に答える
12

ARCを使用しているかARCを使用しているかは関係ありません。

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

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

于 2012-06-28T17:16:19.327 に答える
11

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

于 2013-04-10T17:18:07.513 に答える