[iOS] 강한참조 날로먹는법

유인호·2024년 10월 17일
2

iOS

목록 보기
70/73

0. 서론

어찌보면 이 포스팅의 후속편이라고 볼 수 있겠다.

내가 이번 회사 앱을 만들면서 못해도 딱 이거 하나만큼은 지키기로 했었다. 버그는 있어도 크래시로 앱이 꺼지는 일은 절대 없도록 하자라고 다짐했었다.

앱이 강제로 꺼지는 일은 보통 ! 옵셔널 강제 해제, index out range등이 있을텐데, 이것들도 몇겹으로 문제가 안생기도록 노력했었고, (다음 포스팅 이걸로 할까) 일단 오늘은 내가 했던 노력 중 하나인 강한참조 날로먹는 법을 소개하고자 한다.

SwiftUI Base라서 ViewModel만 Class로 제작하게 되는데, 이때 강한참조가 남아있을까 항상 노심초사 했던거같다.

그래서 저번 포스팅과 마찬가지로 날로먹고자 했음.

1. 조건

이번 코드를 작성하면서 이 조건을 생각하고 코드를 작성하였음.

  1. 귀찮지 않을 것
  2. init과 deinit의 출처를 밝힐 것
  3. 1번을 지킬 것

2. 코드

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

이렇게 나오게 되어 로그만 확인하더라도 내가 코드를 고수처럼 만들었는지, 고수맛 초콜릿으로 고문을 당해야 하는지 알 수 있을 것이다.

profile
🍎Apple Developer Academy @ POSTECH 2nd, 🌱SeSAC iOS 4th
post-custom-banner

0개의 댓글