Objective-c - Objective-c 개체가 해제된 후 해당 개체의 변수에 액세스할 수 있습니까?
大家讲道理
大家讲道理 2017-05-02 09:24:08
0
1
606

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


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

으아아아

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


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

으아아아
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿