찾다

 >  Q&A  >  본문

Objective-c - Objective-c 개체가 해제된 후 해당 개체의 변수에 액세스할 수 있습니까?

1. ARC가 꺼진 경우 Object-c 개체가 적극적으로 해제된 후에도 해당 멤버 변수에 계속 액세스할 수 있는 이유는 무엇입니까?
코드는 다음과 같습니다.

으아아아

문제:
[p release];를 호출한 후에도 p의 변수 a에 계속 액세스할 수 있습니다.

질문:

  1. [p release] 후에도 계속 액세스할 수 있는데 오류가 보고되지 않는 이유는 무엇입니까?

  2. 출시 후에는 계속 접속하지 않는 것이 최선이라는 제안입니다. 액세스할 수 있다면 어떤 상황에서 문제가 발생합니까?

大家讲道理大家讲道理2805일 전610

모든 응답(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의 값 가져오기 --------> Person {a: 10, reference_count: 0}(a는 여전히 10)


    위에서 언급한 것처럼 문제가 발생하도록 하려면 운영 체제가 중단될 때까지(대개 매우 빠르게) 계속 시도하세요.

    으아아아

    몇번 실행해 보면 멈춤 현상이 전혀 발생하지 않는 것을 볼 수 있습니다. . . 그러므로 계속 방문하지 않는 것이 가장 좋은 것은 아니며, 계속 방문하지 않는 것이 좋습니다. . .


    지금은 못 봤는데, dealloc도 수정해야 합니다.

    으아아아

    회신하다
    0
  • 취소회신하다