inblog logo
|
오니의 개발 블로그
    Swift

    Swift 기본 정리 - 생성자/Responder Chain/App 실행/Optional

    기술면접 대비 Swift 정리편
    오니's avatar
    오니
    Jun 30, 2024
    Swift 기본 정리 - 생성자/Responder Chain/App 실행/Optional
    Contents
    편의 생성자clipToBounds vs MaskToBoundsResponder ChainClosure CapturelayoutIfNeeded vs setNeedsLayoutlayoutIfNeededsetNeedsLayout왜 layoutSubview를 호출하면 안되는 것일까?왜 UI업데이트는 main Thread에서 수행되야 하는가?App 실행 과정Optional옵셔널 암시적 추출

    편의 생성자

    • 편의 생성자는 반드시 지정 생성자를 호출해야함.
    • 편의 생성자는 extension을 통해서도 구현 가능하다.
     

    clipToBounds vs MaskToBounds

    둘 다 부모 View를 벗어나도 그릴지 결정하는 변수
    ClipToBounds → View
    MaskToBounds → CALayer

    Responder Chain

    처리 되지 않은 이벤트를 처리 가능한 Responder로 전달하는 과정
    addTarget(self, action: #selector, for: )
    위 함수에서 self가 Responder Chain을 의미한다.
    → nil로 넣으면 Framework가 정한 responder Chain을 따라가겠다는 의미

    Closure Capture

    • 클로져 캡쳐는 기본으로 Referece Type
    { [val1, val2] _ in }
    • Capture List를 통해서 Value Type으로 캡쳐한다.
      • 단, Reference는 여전히 Referece로 사용된다.

    layoutIfNeeded vs setNeedsLayout

    둘 다 layoutSubview, 즉 view 업데이트 호출을 기대하는 함수이다.

    layoutIfNeeded

    Main Runloop에 즉시반영 될 것을 기대한다

    setNeedsLayout

    RunLoop의 다음 시기에 업데이트를 기대한다.

    왜 layoutSubview를 호출하면 안되는 것일까?

    • UI업데이트는 main runloop가 돌면서 수행해야 하기 때문이다.

    왜 UI업데이트는 main Thread에서 수행되야 하는가?

    1. 호출 시기가 제멋대로면 layout이 깨질 위험이 있다.
    1. 과도한 GPU 요청을 방지 (main thread에서 serial로 순차적 요청)
    1. Responder Chain이 main Thread에서 이뤄지기 때문이다.

    App 실행 과정

    1. main함수 실행
    1. UIApplicationMain() 함수 실행
    1. UIApplication 객체 생성
        • responder Chain 형성
        • app Delegate 위임
    1. Info.plist / Storyboard 생성
    1. willFinishLaunchingWithOptions
    1. main Thread RunLoop 생성
    1. didFinishLaunchingWithOptions
    1. 앱 실행에 따른 함수 실행
      1. notion image
         

    Optional

    Optional은 enum 형태로 구성되어 있다.
    enum Optional<Wrapped> { case none case sone(Any) }

    Optional Chain

    let a: String? = "abcde" a?.reversed().forEach { ... }

    Optional Binding

    if let a { } guard let a else { return }

    옵셔널 암시적 추출

    • 옵셔널 타입인데, Framework에서 사용시에 자동으로 옵셔널을 해제하여 사용하는 의미
    @IBOutlet button: UIButton!
    • init과 분리하고 싶을 때 사용한다.
     
    Share article
    Contents
    편의 생성자clipToBounds vs MaskToBoundsResponder ChainClosure CapturelayoutIfNeeded vs setNeedsLayoutlayoutIfNeededsetNeedsLayout왜 layoutSubview를 호출하면 안되는 것일까?왜 UI업데이트는 main Thread에서 수행되야 하는가?App 실행 과정Optional옵셔널 암시적 추출

    오니의 개발 블로그

    RSS·Powered by Inblog