Xcode 8 및 Swift 2.3에서 할당 도구로 이상한 동작이 나타납니다. 나는 deinit
이 호출되고있는 객체 (A)를 가지고 있지만, 참조가 할당 해제되는 객체 중 하나를 제외하고 모두 (내가 말할 수있는 한 별도의 메모리 문제는 아니지만) 객체가 계속됩니다. 할당 도구에 "실시간"으로 표시되고 영구적으로 표시됩니다. 나는 그것을 유지하고있어 디버깅하려고 할 때 또한, 내가 보는 모두는 다음과 같습니다Deinit은 호출하지만 객체는 여전히 메모리에 저장됩니다.
- 가 deinit 방법에 인쇄 라인을 추가 : 나는 deinit을 확인했습니다
주에 의해 실행되고있다
참조가 할당 해제되고 다른 객체를 검증 deinit 방법
- 에 브레이크 포인트를 추가
- , 그들은
A.__deallocating_deinit
를 내부 발생 주장 이형 (-1) REF 카운트 나타날 방법
그러나 몇 가지 알려지지 않은 이유로 인해 달라 붙는 것처럼 보입니다.
확실한 이유는 무엇입니까? ARC에 따라 객체는 참조 카운트가 0이 될 때까지 할당이 취소되지 않습니다. 그래서 다른 뷰 (다른 VC에서)에 대한 뷰의 참조를 유지할 수 있습니다. – Janmenjaya
deinit가 호출되면 (반환 된) 객체가 거의 확실하게 사라집니다. 일반적으로 이런 종류의 문제가 발생하면 예상하지 못한 개체의 사본이 두 번째 있습니다. ("기대하지 않았던 두 번째 사본이 있습니다"는 실제로는 불가능할 것으로 보이는 다양한 행동의 원인입니다.) 메모리 주소를 확인하십시오. 하지만 내가 찾던 또 하나의 것은 당신이 우연히 객체를 deinit에 유지하고 있는지 여부입니다. 그걸로 당신을 혼란에 빠지게 할 수 있습니다. (하지만 아직도 * 아마도이 증상을 일으키지 않을 것입니다; 나는 여분의 복사본을 베팅합니다). –
@RobNapier 실제로 하나의 개체 만 생성된다는 것을 확인했습니다. 'deinit'이 처형 당했고 아직 그 객체를 해제하지 않았습니다. 나는 아직도이 문제가 발생한 이유를 100 % 알지 못하지만, 결국 아래의 답을 추가하여 결국 문제를 해결했습니다. –