0

私がこのようなコードを持っている場合:

     -(void) func {  
         ObjectA* A = [[ObjectA alloc]init];  

        [something doSomething:blah andDelegate: A]; 

    }

doSomethingの呼び出しがhttp要求呼び出しを行うと仮定すると、デリゲートはサーバーから応答を受信したときにのみ呼び出されます。この場合、遅延が発生します。注:何かはクラスのインスタンス変数です。

'func'を2回呼び出すと、デリゲートで応答を受信する前に、最初に初期化されたAがリークされますか。応答を受信したときにデリゲート関数を呼び出すときに解放操作があると想定します。

私がこれを考える理由は、最初のデリゲートがその役割を終了する前に、「A」の2番目に初期化されたものがデリゲートとして何かに渡された場合です。'A'の2番目に初期化されたものが'A'の最初に初期化されたものに置き換わりますか?

4

2 に答える 2

4

はい、ARCでコンパイルしていない場合は、リークがあります。を使用してオブジェクトを作成しています。allocつまり、オブジェクトを所有しており、を送信してその所有権を放棄することはありませんrelease。これは、Cocoaのコアメモリ管理ルールです

something渡したオブジェクトAも所有する必要がある可能性がありますA(実際、そのように聞こえます)。その場合は、にsomething送信し、不要になったときに送信retainする必要があります。AreleaseA

'A'の2番目に初期化されたものが'A'の最初に初期化されたものに置き換わりますか?

ある種。この名前Aは、このメソッド内でのみ有効です。オブジェクトを作成してに割り当てるAと、その名前がスコープ外になり、オブジェクトを参照できなくなります。それがリークです。このメソッドを再度実行すると、基本的に新しい名前Aが作成され、それに別のオブジェクトが割り当てられます。

于 2012-05-28T01:10:24.713 に答える
1

somethingfuncリリースする必要がありますAsomething使用時にも保持する必要がありますA

于 2012-05-28T01:08:57.097 に答える