ARCでコンパイルしない場合は、copy
などのデータ型のプロパティを使用することをお勧めしますNSString
。copy
ARCモードでの使用に関する適切なドキュメントが見つかりませんでした。誰かがARCに何が適用できるか教えてもらえますか?
4 に答える
変更可能な文字列を渡して、知らないうちに変更することを避けたいので、コピーすることをお勧めします。コピーは、あなたが持っている文字列が変更されないことを保証します。
コピーとARCは直交しています。可変オブジェクトのコピーを作成して、それらの状態を「フリーズ」します。ARCは、オブジェクトの参照カウントを追跡します。
NSString
オブジェクトは可変である場合とそうでない場合があります。パラメータとしてを受け取った場合NSString*
、そのタイプをチェックしない限り、それが不変であるかどうかを確認することはできません(その場合でも、誤検知が発生する可能性があります)。設定後に文字列が変更されないことにアルゴリズムが依存している場合は、コピーを作成するのが正しい方法です。一方、ARCは、オブジェクトへの強い参照を保持している間、オブジェクトが解放されないようにします。
ARCを使用しているか非ARCを使用しているかは関係ありません。
の背後にある理由copy
は、クラスの内部状態が実装の外部から変更されないことを保証できるようにするためです。
これは、誰かがあなたを渡し、NSMutableString
後でそれを変更した場合に発生する可能性があります。この考慮事項は、メモリ管理環境とは無関係です。
copy
としてカウントされstrong
ます。使用する:
@property(nonatomic、copy)NSString * name;
https://devforums.apple.com/message/654033#654033
あるいは:
@property NSString * firstName;