명확하게해서는 안되는 릴리스 빌드에서 오브젝트 (ivar, NSMutableDictionary)가 삭제되는 iOS 게임 (ARC와 함께 컴파일 됨)에 케이스가 있습니다. . 디버그 빌드에서 모든 것이 좋습니다.오브젝트를 삭제하지 않는 경우 ARC를 디버그하는 방법
이 문제를 디버깅하는 가장 좋은 방법을 찾으려고합니다. 내가 어떤 종류의 수표를 물건에 대고 놓는다면, 그 물건은 꼭 돌아 다니기 만하면됩니다. 응용 프로그램이 충돌하여 개체가 사용 중이라는 것을 알았습니다. 따라서 개체가 액세스되고 있습니다.
좀비 오브젝트를 사용하여 오브젝트가 삭제되고 있음을 알았지 만, 어디에서 언제 일어나는지 알 수 없습니다.
컴파일러가이 객체가 더 이상 필요하지 않거나 실제로 삭제 될 때를 알 수있는 방법이 있습니까 (자동 복구 풀에있는 경우 아무 것도 말해주지 않을 수도 있음).
누구든지이 문제를 추적하는 데 유용한 조언이 있습니까? 나는 이것을 컴파일러 버그라고 부르기를 주저하지만 컴파일러가이 객체가 더 이상 참조되지 않는다고 생각할 수있는 것을 볼 수 없다. ivar를 보유하고있는 객체는 모든 코드가 실행되는 곳이므로 분명히 여전히 주위에 있습니다 (그리고 그렇지 않은 경우 훨씬 더 나쁜 일들이 일어날 것입니다).
지금은 개체를 삭제하지 못하게하는 디버깅 코드 한 줄을 남기고 있지만 해당 솔루션으로 응용 프로그램을 출시하는 것은 싫어합니다.
감사합니다.
이 문제에 대한 추가 정보가 있습니까? 방금 ARC가 유지해야하는 객체를 삭제하는 것을 다루는 -O0 이외의 다른 최적화로 컴파일 할 때 충돌이 발생했습니다. – fbrereto
xcode가 업데이트되면 버그가 나에게 돌아갔다. 그래서 컴파일러 문제라고 생각합니다. 그것은 9 개월 전이었고 그 이후로 문제가있었습니다. –
감사합니다. CGPoint를 단지 Objective-C 클래스의 멤버가 아닌 속성으로 만들었던 것은 이상한 문제였습니다. 이상하지만 적어도 문제는 해결되었습니다. – fbrereto