Kenny's Game Programming
iPhone Application Runtime Environment
The Application Runtime Environment 실행 환경
iPhone OS의 실행 환경은 애플리케이션을 빠르고 안전하게 실행하도록 고안되었다. 이 장에서는 이러한 실행 환경의 핵심적인 특성과 운영 방법을 알아본다.
번역: 이현우(bless2k@nate.com), * 개인 블로그에서 보기
Fast Launch, Short Use 빠른 실행, 짧은 사용
iPhone OS의 강점은 그 신속함에 있다. 사용자 대부분은 아이폰을 가방이나 주머니에서 꺼내어 수 초간 또는 수 분간 사용하고 다시 집어넣는다. 사용자는 그 시간 동안 전화를 걸거나, 연락처를 조회하거나, 현재 듣고 있는 곡을 바꾸거나, 원하는 정보를 얻는다.
iPhone OS에서는 한 번에 오직 하나의 애플리케이션만이 실행된다. 이는 사용자가 바탕 화면에서 애플리케이션 아이콘을 선택하자마자 애플리케이션이 지연 없이 실행되어야 함을 의미한다. 만약에 시작하는 시간이 오래 걸린다면 사용자는 그 애플리케이션을 덜 사용하게 될 것이다.
빠르게 시작하는 것과 함께 애플리케이션은 신속하게 종료해야 한다. 사용자가 애플리케이션을 떠날 때(Home 버튼을 누르거나 다른 방법으로 애플리케이션을 전환하는 경우), iPhone OS는 애플리케이션을 종료하라는 메시지를 보낸다. 그러한 경우, 저장되지 않은 데이터를 저장하고 가능한 한 빨리 종료한다. 만약 5초 이내에 종료하지 않는다면 시스템이 강제로 종료시킬 수 있다.
사용자가 다른 애플리케이션으로 전환하면 기존 애플리케이션이 백그라운드(background)에서 동작하지는 않지만, 마치 그렇게 보이게 하는 것은 권장한다. 애플리케이션이 종료할 때 마지막 사용 상태 정보를 저장해야 한다. 그렇게 하면, 사용자가 다시 애플리케이션을 실행시켰을 때 이전 상태로 바로 복귀할 수 있어서 좀 더 일관적인 사용자 경험(User Experience)을 제공한다. 사용자의 공간을 이렇게 저장하는 것은 애플리케이션을 시작할 때마다 정보를 얻기 위해서 여러 화면을 뒤지는 시간을 줄여준다.
The Application Sandbox 애플리케이션 샌드박스
보안상의 이유로, iPhone OS는 애플리케이션을 파일 시스템의 특정한 위치로 제한한다. 이러한 제약은 일명 "샌드박스(Sandbox)"라고 하는 보안 모델이다. 이 샌드박스는 애플리케이션이 파일 시스템, 사용자 설정, 네트워크 자원, 하드웨어 등등의 제어를 제한한다. 애플리케이션 파일과 데이터는 다른 애플리케이션이 접근할 수 없는 안전한 위치에 저장된다. 애플리케이션이 설치될 때 시스템은 다음과 같은 경로에 애플리케이션의 홈 디렉터리를 만든다.
/applicationRoot/ApplicationID/
설치하는 과정에서, 시스템은 위의 홈 디렉터리와 몇몇 중요한 하위 디렉터리를 생성하고, 샌드박스를 설정하고, 그곳에 자원 파일을 복사한다. 이렇게 애플리케이션마다 독립적인 위치를 사용함으로써 애플리케이션의 백업이나 복원, 갱신, 제거와 같은 작업이 단순해진다.
Virtual memory System 가상 메모리 시스템
프로그램 메모리를 관리하기 위해서, iPhone OS는 Mac OS X와 거의 똑같은 가상 메모리 시스템을 사용한다. iPhone OS에서는 각각의 프로그램이 가상 메모리 공간을 가지고 있지만, 가용 메모리 한도는 실제 물리적인 메모리의 양으로 제한된다. Mac OS X와는 달리 iPhone OS는 메모리가 부족해도 휘발성 메모리 페이지를 디스크에 저장하지 않기 때문이다. 대신에, 동작하는 애플리케이션에 메모리가 좀 더 필요한 경우에는 가상 메모리 시스템은 휘발성 메모리 페이지의 메모리를 해제(free)한다. 이 과정은 사용하지 않거나 읽기 전용 데이터를 담고 페이지를 제거하는 것인데, 예를 들어, 코드 페이지와 같은 것들은 필요할 때 언제나 다시 불러올 수 있기 때문이다.
만약 메모리가 계속 부족하다면, 시스템은 동작중인 애플리케이션에 알려서, 좀 더 많은 메모리를 해제하도록 요구한다. 모든 애플리케이션은 이러한 요청을 받아들여서 메모리 문제를 해결할 수 있도록 해야 한다.
The Automatic Sleep timer 자동 휴면 타이머
iPhone OS가 전력 사용을 줄이는 방법 중의 하나가 자동 휴면 타이머이다. 만약 시스템이 특정 시간 내에 어떤 사용자 입력도 감지하지 않으면 화면을 약간 어둡게 만들고, 마지막에는 완전히 꺼버린다. 보통 개발자 대부분은 타이머 설정을 건드릴 필요가 없지만, 게임 개발자나 입력 이벤트를 사용하지 않는 애플리케이션의 개발자들은 이 기능을 중단시킬 수 있다. 타이머를 끄기 위해서는 UIApplication의 idleTimerDisabled 특성을 YES로 설정한다.
이는 전략 소모를 늘이기 때문에, 타이머를 끄는 것은 되도록 피해야 한다. 예외가 되는 것은, 맵 애플리케이션(네이베이션과 같은?), 게임, 터치 이벤트가 필요치 않은 애플리케이션 등이다. 반면, 음악 애플리케이션은 타이머를 끌 필요가 없는데, 스크린이 어두워지더라도 음악은 계속되기 때문이다. 만약 타이머를 껐다면 되도록 빨리 다시 켜서 시스템이 전력 소모를 줄일 수 있도록 해야 한다.
Posted at 09:35오후 1월 17, 2010 by Kenny in iPhone | Comments[0]
