それをもっと詳しく説明しようと思います:
ファイルに文字列変数があり.h
ます。ビューでロードされましたが、次のように割り当てています。
test = [NSString stringWithFormat:@"sample"];
このコードで実際に起こっているのは、テストが自動解放されたオブジェクトです。これとオブジェクトを使用せずに使用するalloc
と、init
これは自動解放されたオブジェクトであり、占有したメソッドの後にメモリを解放します。
この状況を回避するために、プロパティを作成することで@Mehulのソリューションを使用できます。これはカプセル化の概念に反します。クラス外でアクセスしたくないオブジェクトや、オブジェクトと一緒に表示したくないオブジェクトがある場合があります。これらの条件では、以下を使用してください。
test = [[NSString stringWithFormat:@"sample"] retain]; // or
test = [[NSString alloc] initWithFormat:@"sample"];
これにより、ストリングを解放するまでストリングが存続します。
使用するのは良くないが、あなたがそれをよりよく理解できるようにあなたに伝えたい別の方法があります。使用する
test = @"sample";
文字列を追加したり、フォーマットで使用したりしたくない場合は、オブジェクトに単純な文字列を割り当てることができNSString
ます。
retainCount
これを使用すると、テスト変数が無限になります。これを使用してクラッシュを回避できますが、これは無限であると言ったので、retaiCount
使用後に解放してメモリを解放することはできないため、これは好ましくありません。したがって、以前の方法の方が正確です。
これは、ではなくクラスメソッドで作成されたすべての自動解放オブジェクトに当てはまりますinit
。
これがあなたをもっとクリアすることを願っています。