← 글 목록

notes

IOS - Event Driven programing

iOS Event Driven Programming의 이벤트·델리게이트·콜백 흐름 메모.

iOS 화면은 “위에서 아래로 실행하고 끝”이 아니라 이벤트가 올 때마다 핸들러가 반응한다. 버튼 탭, 키보드, 네트워크 콜백, 타이머 전부 그 줄기.

흐름

  • 컨트롤에 타깃 등록
  • RunLoop가 터치/타이머 이벤트 수신
  • 등록한 selector / 클로저 실행
button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)

@objc func buttonTapped() {
    print("탭")
}

SwiftUI면:

Button("탭") { print("탭") }

델리게이트도 이벤트 계약

테이블 셀 선택, 텍스트필드 리턴, WebView 네비게이션 실패 — 전부 “누가 처리할지” 프로토콜로 넘긴다. NotificationCenter는 방송형, delegate는 1:1에 가깝다.

내가 조심하는 것

  • 타깃이 self인데 VC가 안 살아 있으면 → 당연히 안 불림
  • 메인 스레드 아닌 곳에서 UI 이벤트처럼 UI를 건드리면 경고/깨짐
  • 이벤트 지옥이 되면 Combine / async 스트림으로 한쪽으로 모으는 게 낫다