1. ARC がオフになっている場合、Object-c オブジェクトがアクティブに解放された後もそのメンバー変数にアクセスし続けることができるのはなぜですか?
コードは次のとおりです:
リーリー
問題:
[p release]; を呼び出した後でも、p の変数 a にアクセスできます;
質問:
[p release] 後も引き続きアクセスできるのはなぜですか?また、エラーが報告されないのはなぜですか?
リリース後はアクセスを続けない方がよいという提案です。 アクセスできる場合、どのような状況で問題が発生しますか?
p が指すアドレスはリリース後も変更されていないため、オペレーティング システムがそのメモリ部分を再利用していない場合、そのメモリにアクセスし続けてもエラーは報告されません。これはダングリング ポインタです。
p ----------------------------------> 人 {a: 10、reference_count: 1}
p -- リリース メッセージを --> 人 {a: 10、reference_count: 1} に送信します
p ----------------------------------> 人 {a: 10、reference_count: 0} (割り当て解除済み) )
p ------------- a --------> 人の値を取得します (a は 10 のままです)
;上で述べたように、問題を引き起こしたい場合は、オペレーティング システムが停止するまで (通常はすぐに) 試し続けてください:
リーリー数回実行すると、ハングしたときにパターンがまったくないことがわかります。 。 。したがって、訪問を続けない方が良いというわけではありませんが、訪問を続けないのは間違いありません。 。 。
今は見えませんでしたが、dealloc も変更する必要があります:
リーリー