1

私は次のプロパティを持っています

.h

@property (nonatomic, strong) NSMutableDictionary *cache;

.m

@synthesize cache = _cache;

_cacheviewDidLoad でビルドされたデータ。_cacheビューコントローラーがアンロードされると自動的にクリーンアップされるのでしょうか、それとも in を明示的に行う必要があります_cache = nil;viewWillUnload?

4

4 に答える 4

2

ARC を使用しているかどうかに関係なく、これらはではクリーンアップされません-viewDidUnload。それらを明示的に解放する (またはnilARC の下に設定する) 必要があります。

于 2012-06-04T00:43:01.000 に答える
1

短い答えはノーです。インスタンス変数は自動的に解放されません。ビューコントローラーで割り当て解除は発生しません。コントロールされているビューがクリアされます。

クリアしたいものはすべて、viewDidUnload で明示的に行う必要があります (IB を介して追加された変数は、そのメソッドに自動的に配置されることに注意してください)。

viewDidUnload の典型的なシナリオは、コントローラによって管理されているビューが画面上になくなった場合です (たとえば、別のコントローラがナビゲーション コントローラでプッシュされた場合)。システムがメモリ不足を検出したため、ビューがアンロードされました。

ビュー内のオブジェクトへの弱い参照はすべて自動的にクリアされます (どこかに余分な強い参照がない限り)。viewDidUnload では、ビューが画面に表示されたときに再ロードできるデータへの強い参照を nil する必要があります。

viewDidUnload の実行は、dealloc と同じではありません。リリースする (または KVO または通知センターに登録する) 必要があるリソースを管理している場合は、その作業も行う必要があります。これらの場合、viewDidUnload と dealloc の両方で (必要に応じて) 実行する必要があることに注意してください。

于 2012-06-04T04:08:05.257 に答える
1

ARC には応答できませんが、viewdidUnload は VC が解放されたことを意味しません。ビューが解放されていることを意味します。それを強制するには、NavigationController を使用して、いくつかのビューをプッシュし、シミュレーターでいくつかのメモリ警告を送信することができます。viewDidUnload は、最上位ではない vc に対して呼び出されます。

Re: ARC さん、VC が解放されたときに呼び出される dealloc メソッドを持つことができます。スーパーを呼び出さないでください。

于 2012-06-04T04:08:19.233 に答える
0

あなたは付け加えられます:

-(void)dealloc { 
    // If you are using ARC remove the line below
    [super dealloc]
} 

ブレークポイントを設定すると、いつ解放されるかがわかります。dealloc メソッドは ARC でも呼び出されますが、ARC では [super dealloc] を呼び出さないでください。

于 2012-06-04T01:28:13.960 に答える