-1

私のアプリでは、いくつかの非同期操作の後、私のViewController. これViewControllerがすでにdeallocatedそのasynch操作の後である場合があります。ViewController私の質問は、が既に割り当て解除されているかどうかを確認するにはどうすればよいですか? 変数としてアクセスできIdます。nil動作しないかどうかの簡単なチェック。これは の適切な値ですViewController:

ここに画像の説明を入力

しかし、これはクラッシュを引き起こします:

ここに画像の説明を入力 空かどうかを確認するにはどうすればよいですか?ObjectiveC初心者なので素人質問かもしれませんが、よろしくお願いします。回答ありがとうございます。

4

3 に答える 3

1

弱いプロパティを使用して調査したい場合があります-これらは、参照されているオブジェクトの割り当てが解除されると、それ自体がゼロになるはずです。この質問への答えは役に立つはずです:

Objective-C における強弱の違い

于 2013-10-01T12:06:18.460 に答える
0

DELEGATEまたは完了ブロックを使用してみてください

于 2013-10-01T11:52:57.903 に答える
0

私の質問は、ViewController が既に割り当て解除されているかどうかを確認するにはどうすればよいですか?

答えは、できないということです (ただし、以下を参照してください)。オブジェクトの割り当てが解除されると、そのストレージがヒープに戻って再利用されるだけです。その記憶の内容には何も起こりません。したがって、id ポインターは、元の割り当て解除されていないオブジェクト、割り当て解除された元のオブジェクト、ストレージを再利用した新しいオブジェクト、または単なるガベージのいずれかを指している可能性があります。

これを回避する古い方法は、ビュー コントローラー (デリゲート) がデリゲートを実行するオブジェクトを所有することです (非同期操作を実行しているものは何でも)。ビュー コントローラーは、ビュー コントローラーの割り当てが解除されると、委任を行うオブジェクトのデリゲート プロパティ (割り当てプロパティ) を nil にします。

ARC では、デリゲートを行うオブジェクトのデリゲート プロパティが弱いプロパティであることを除いて、同じ配置です。つまり、デリゲートが割り当て解除されると、ARC は自動的にそれを nil します。

于 2013-10-01T12:22:21.427 に答える