Objective-c - Objective-c オブジェクトの変数は、リリース後にアクセスできますか?
大家讲道理
大家讲道理 2017-05-02 09:24:08
0
1
607

1. ARC がオフになっている場合、Object-c オブジェクトがアクティブに解放された後もそのメンバー変数にアクセスし続けることができるのはなぜですか?
コードは次のとおりです:

リーリー

問題:
[p release]; を呼び出した後でも、p の変数 a にアクセスできます;

質問:

  1. [p release] 後も引き続きアクセスできるのはなぜですか?また、エラーが報告されないのはなぜですか?

  2. リリース後はアクセスを続けない方がよいという提案です。 アクセスできる場合、どのような状況で問題が発生しますか?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(1)
Peter_Zhu

p が指すアドレスはリリース後も変更されていないため、オペレーティング システムがそのメモリ部分を再利用していない場合、そのメモリにアクセスし続けてもエラーは報告されません。これはダングリング ポインタです。


p ----------------------------------> 人 {a: 10、reference_count: 1}

p -- リリース メッセージを --> 人 {a: 10、reference_count: 1} に送信します

p ----------------------------------> 人 {a: 10、reference_count: 0} (割り当て解除済み) )

p ------------- a --------> 人の値を取得します (a は 10 のままです)

;

上で述べたように、問題を引き起こしたい場合は、オペレーティング システムが停止するまで (通常はすぐに) 試し続けてください:

リーリー

数回実行すると、ハングしたときにパターンがまったくないことがわかります。 。 。したがって、訪問を続けない方が良いというわけではありませんが、訪問を続けないのは間違いありません。 。 。


今は見えませんでしたが、dealloc も変更する必要があります:

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート