クラスに次のようなプロパティがある場合:\
@interface Test
NSString *str;
@end
そして、.mの私の初期化で:
str = @"Test";
クラスの dealloc で手動で解放する必要がありますか?
この種はどうですか?
NSString *myStr = [NSString stringWithFormat:@"%@", someString];
それも解放する必要がありますか?
クラスに次のようなプロパティがある場合:\
@interface Test
NSString *str;
@end
そして、.mの私の初期化で:
str = @"Test";
クラスの dealloc で手動で解放する必要がありますか?
この種はどうですか?
NSString *myStr = [NSString stringWithFormat:@"%@", someString];
それも解放する必要がありますか?
本当にARCを使用する必要がありますが、特定の質問に答えるには、いいえ:それらをリリースする必要はありません。自分が「所有」しているものだけを解放し、[ new
、alloc
、retain
、copy
] のいずれかを含むメソッドから取得したものだけを所有します。
つまり、これらの文字列を所有していないため、それらを保持する必要がある場合は保持 (またはコピー) する必要があります。
どちらのコンストラクト1も、自動解放された文字列を作成します。それらを (明示的に、または保持されたプロパティに割り当てることによって) 行う必要がありretain
ます。そうしないと、自動解放が呼び出されると、ダングリング参照が発生します2。retain
オブジェクトでa を呼び出したら、それを解放するのはあなたの責任になります。
s のより堅牢なアプローチは、プロパティを保持するのではなく、プロパティNSString
を使用することです。copy
そうすることで、コンテンツを検証した後にメソッドに
NSMutableString
渡された が変更された場合の問題を回避できます。init
retain
そうしないと、 orをrelease
明示的に呼び出すことができません。
2これは通常、メソッドを終了してからしばらくたってから発生し、制御は実行ループに戻ります。
ARC を使用しているかどうかわからない場合は、解放/保持してみてください。リリース/保持できないという警告が表示された場合は、ARC が有効になっています。それ以外の場合は無効になっているため、保持してリリースする必要があります。
プロジェクトで ARC を使用している場合は、リリースする必要はありません (自動参照カウント)。ARC は iOS 5 以降で有効になっているため、iOS 5 以降をターゲットにしている場合は、何もリリースする必要はありません。