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의 값 가져오기 --------> Person {a: 10, reference_count: 0}(a는 여전히 10)
위에서 언급한 것처럼 문제가 발생하도록 하려면 운영 체제가 중단될 때까지(대개 매우 빠르게) 계속 시도하세요.
으아아아몇번 실행해 보면 멈춤 현상이 전혀 발생하지 않는 것을 볼 수 있습니다. . . 그러므로 계속 방문하지 않는 것이 가장 좋은 것은 아니며, 계속 방문하지 않는 것이 좋습니다. . .
지금은 못 봤는데, dealloc도 수정해야 합니다.
으아아아