Cocoa クラスが ARC の下でいつ解放されるかを確認する最速の方法は何ですか? 私自身のクラスで、メモリの問題をチェックしたいときにメソッドに NSLog を入れた- (void) dealloc;
ので、いつ解放されるかがわかります。しかし、NSArray のような Obj-C クラスの場合、いつ割り当てが解除されたかをどのように知ることができますか? また、クラスを nil に設定すると ARC がオンになっている場合、自動的にメモリから削除されますか?
1 に答える
クラス (任意のクラス) の割り当てがいつ解除されるかは、Instruments の Allocations インストゥルメントを使用して確認できます。それはそれを行うためのより良い方法です。ただし、dealloc をオーバーライドして、ARC でメッセージをログに記録することは可能です。違いは、dealloc をオーバーライドすると呼び出すことができないことです[super dealloc]
(コンパイラがそれを処理します)。
割り当てが解除されたインスタンスにメッセージを送信したことが原因で問題が発生した場合は、Instruments の Zombies インストゥルメントを使用してください。割り当て解除されたオブジェクトにメッセージを送信したときに通知され、メッセージが送信されたオブジェクトの割り当て/保持/解放/割り当て解除の履歴と共に、問題のコール スタックを確認できます。
ARC の下では、所有権のセマンティクスほど正確なオブジェクトの有効期間について考えるべきではありません。つまり、ARC でストロング変数を nil に設定すると、参照されたオブジェクトが解放されます。割り当てが解除されるかどうか (つまり、「メモリから [s] 自体を削除する」) は、他のオブジェクトがそれを強く参照しているかどうかによって異なります。また、自動解放プールにある場合は、プールが空になるまで割り当てが解除されません (ARC と MRC の両方に当てはまります)。繰り返しになりますが、特定のケースで何が起こっているかの詳細は、割り当てツールを使用して発見できます。