0

ARCに関するドキュメントを読んでいて、混乱する部分に出くわしました。誰か助けてください。2 つの質問があります: 1.変数がそれを指していないときに ARC リリース オブジェクトを知っています。メソッド returnString で?returnString が呼び出されたメソッドのスコープから出ると、受信変数が解放されることはわかっていますが、returnString 内にある変数はどうなりますか。

-(NSSTring *)returnString
{
   NSString *str = //Some value;

   return str;//What will happen to this.
}

その他の方法:

-(void)useString
{
   NSString *str1 = [self returnString];  //It will get release when this method gets over.
}

2. returnString が ARC でコンパイルされていないサードパーティのライブラリにある場合はどうなりますか?

4

2 に答える 2

2

ARCはコンパイル時に[... retain]andメソッドの呼び出しを挿入するだけです。[... release]あなたの場合、「str」がローカル変数であることがわかり、宣言の直後に autorelease メソッド呼び出しが追加されます。実際、メモリは同じ方法で割り当て解除されますが、心配する必要はありません。ARC が自動的に行います。

于 2012-06-18T15:38:59.953 に答える
0

最初の質問については、ARC が保持と解放を担当します。変数への参照を維持している場合はいつでも、ARC はそれを保持する必要があります。特定の例では、文字列は自動解放されたオブジェクトとして返される可能性がありますが、実際の実装は隠されています。

2 番目の質問については、ライブラリを ARC を使用しないものとしてマークして、手動での保持/解放を維持することができます。これを行うには、次の質問を参照してください: ios5 ARC ARC からファイルを除外するためのコンパイラ フラグは何ですか?

于 2012-06-18T15:42:20.490 に答える