어찌보면 이 포스팅의 후속편이라고 볼 수 있겠다.
내가 이번 회사 앱을 만들면서 못해도 딱 이거 하나만큼은 지키기로 했었다. 버그는 있어도 크래시로 앱이 꺼지는 일은 절대 없도록 하자라고 다짐했었다.
앱이 강제로 꺼지는 일은 보통 ! 옵셔널 강제 해제, index out range등이 있을텐데, 이것들도 몇겹으로 문제가 안생기도록 노력했었고, (다음 포스팅 이걸로 할까) 일단 오늘은 내가 했던 노력 중 하나인 강한참조 날로먹는 법을 소개하고자 한다.
SwiftUI Base라서 ViewModel만 Class로 제작하게 되는데, 이때 강한참조가 남아있을까 항상 노심초사 했던거같다.
그래서 저번 포스팅과 마찬가지로 날로먹고자 했음.
이번 코드를 작성하면서 이 조건을 생각하고 코드를 작성하였음.
import Foundation
class BaseInitalizeLogger: DeInitLogging {
init() {
Utility.Log.debug("📱 Initialize: \(className)")
}
deinit {
Utility.Log.debug("♻️ Deinitialize: \(className)")
}
}
protocol DeInitLogging: AnyObject {
var className: String { get }
}
extension DeInitLogging {
var className: String {
return String(describing: type(of: self))
}
}
이제
final class TestViewModel: BaseInitalizeLogger, ObservableObject {
// 내용
}
이렇게 해주면,
[Debug][TestViewModel.swift -> init]: 📱 Initialize: TestViewModel
[Debug][TestViewModel.swift -> deinit]: ♻️ Deinitialize: TestViewModel
이렇게 나오게 되어 로그만 확인하더라도 내가 코드를 고수처럼 만들었는지, 고수맛 초콜릿으로 고문을 당해야 하는지 알 수 있을 것이다.