0

私は次のコードを持っています:

NSObject *anObject = [[objArray lastObject] retain];
[objArray removeLastObject];
return [anObject autorelease];

ARCでは、保持または自動解放を使用できませんが、次の場合:

NSObject *anObject = [objArray lastObject];
[objArray removeLastObject];
return anObject;

anObjectアレイから削除されたときに保持カウントが0に達していないのですか?

私が見つけた: ARCの「[[何かを保持する]自動解放]」に相当するものは何ですか? しかし、それは同じ状況のように見えます。

4

2 に答える 2

2

基本的には、ステートメントanObjectで使用されているため、リリースされていません。return

ARC が行うことは、コードを見て、各変数を使用している場所を決定し、コードを実行可能ファイルにコンパイルする際に、対応する呼び出しをフードの後ろに挿入することretainですrelease

変数がクリティカル セクションを通過して存続することを絶対に確認したい場合 (ただし、その必要性はほとんどなく、ここでもそうではありません)、明示的に として宣言できます __strong。ただし、ARC の目的を無効にすると、保持サイクルやメモリ リークが簡単に発生する可能性があるため、オブジェクト間の関係を理解し​​ておく必要があります。

于 2012-10-10T05:53:28.977 に答える
0

ローカル変数 'anObject' は強い参照であるため、コードの 2 番目のブロックは問題ありません。このコードは、「anObject」を弱参照として宣言した場合にのみ問題になります。

于 2012-10-10T05:54:27.980 に答える