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 스트림으로 한쪽으로 모으는 게 낫다