- Run Loop
- 이벤트 처리를 위한 loop로 입력소스와 타이머소스를 주로 처리.
1) 입력소스(input source): 다른 thread나 어플리케이션에서 전달되는 메시지 이벤트(비동기식)
2) 타이머소스(timer source): 예정시간이나 반복수행간격에 따라 발생하는 이벤트(동기식)
- 앱을 계속 살려두기 위함
- 할 일이 많을 때는 thread를 바쁘게, 할 일이 없을 때는 쉬게 하는 것을 목적으로 함
- Main thread에서 생성된 Main run loop 이외의 경우 사용자가 직접 추가해야 함
- 지속적 장호작용이 필요한 경우 반드시 사용(ex: 통신, 타이머)
- 사용자 이벤트(user interaction)발생 및 처리과정
1) 이벤트 발생(터치, 키보드 등)
2) 시스템에서 port를 통해 앱으로 전달
3) 이벤트 큐에 등록
4) 이벤트에 맞는 메소드 실행
<그림1. 사용자 이벤트(user interaction) 발생 및 처리과정>
https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html
- 전달받은 이벤트를 앱의 run loop에서 처리하는 과정
1) run loop 대기 중 이벤트 발생(주로 입력소스와 타이머소스 처리) 2) 정해진 메소드 호출(타이머에서 설정한 시간데 따라) 3) 메소드 완료 후 변경될 필요가 있는 사항 적용(뷰의 경우 setNeedsLayout, setNeedsDisplay) 4) runUntil- 메소드에서 정한 시간까지 유지, 할일 없으면 suspend 상태.
<그림2. 전달받은 이벤트를 앱의 run loop에서 처리하는 과정> (https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html)
'프로그래밍 > iOS' 카테고리의 다른 글
비동기 처리방법 및 장/단점(GCD 제외) (0) | 2017.04.17 |
---|---|
setNeedsLayout VS layoutIfNeeded / setNeedsDisplay VS layoutIfDisplay (1) | 2017.04.14 |
NSHashTable (0) | 2017.04.11 |
NSAutoreleasePool VS @autorelease block (0) | 2017.04.10 |
iOS 식별자(identifier) (2) | 2017.04.07 |