앱이 정상적으로 작동하다가 밑에 코드를 넣은순간부터 앱이 정지 되고 무한루프가 돌았습니다. CPU99%;;
@Environment(\.dismiss) var dismiss
dismiss()
미친듯이 올라가는 메모리 ㄷㄷ;;
추가적으로 뜨는 메시지
이 디버깅 메시지의 뜻은
라는 의미라고 합니다 .
이렇게 보면 api 쪽의 문제인줄 알고 전부 봐왔지만 ..
고작 이거 하나 받아오는 코드인데 ?? 알고보니 api의 문제가 아니였습니다..
@Environment(\\.dismiss) private var dismiss
문제의 코드 ; 고작 뒤로가기가?
뷰를 이동할 때 @Environment 변수를 사용하는 모든 뷰의 body 내부 코드를 재실행한다고 합니다.
이렇게 되면 앱 성능과 메모리 등 부정적인 영향을 미치고 앱이 오랫동안 저걸 사용하는 뷰에서 멈춘다면 리소스 사용량이 급증하게 된다고 합니다.
NavigationStack으로 옮긴 후로 iOS 16/17에서 같은 문제가 발생하고 있으며 무한 루프의 원인을 정확히 알 수 없습니다.
무한 루프가 되니 cpu와 메모리가 급증하며 앱이 멈춰버린것입니다..!
@Environment가 있는 뷰들이 많은데 계속 무한 루프로 하위 뷰들의 body를 그리다가 timestamp 의 count가 맥시멈도 되고 CPU memory도 지구 끝까지 올라가면서 정지된듯해요.
그래서 iOS 15 전버전에서 사용되던 @Environment(.presentationMode)를 가져와서 사용하니 해결됐씁니다!!
@Environment(\.presentationMode) var presentationMode
presentationMode.wrappedValue.dismiss()