検索

ホームページ  >  に質問  >  本文

Objective-c - Objective-c オブジェクトの変数は、リリース後にアクセスできますか?

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

リーリー

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

質問:

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

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

大家讲道理大家讲道理2807日前617

全員に返信(1)返信します

  • 天蓬老师

    天蓬老师2017-05-02 09:26:08

    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
  • キャンセル返事