2009-05-21 4 views
5

iPhone OS 장치에서 NSTimers를 동시에 실행하는 장치가 너무 많습니까? 나는 한 번에 25 번씩 발사하는 단일 타이머에 의해 호출되는 많은 루틴을 가지고 있으며 일들은 꽤 고르지, 느리고 무겁다. 작업로드를 조금씩 배포하기 위해 NSTimers를 하나 이상 추가하는 방법에 대해 생각하고 있지만 사용하는 것이 얼마나 많은지 걱정됩니다. 이것은 내가 알고있는 각 개별 타이머의 실행 속도에 다소 의존적 일 수 있으므로 초당 20 ~ 30 회 발사 속도를 가정하십시오. 얼마나 많은 NSTimers가 너무 많습니까?얼마나 많은 NSTimers가 너무 많습니까?

답변

5

내부적으로는 NSTimers이 모두 단일 하드웨어 타이머에 구현됩니다. 운영 체제는 실행중인 모든 응용 프로그램에 대한 타이머의 중앙 목록을 유지하고 가장 빠른 이벤트에 대한 단일 하드웨어 타이머를 간단히 예약합니다.

타이머를 추가해도 앱 동작이 변경되지 않습니다. 즉, 본질적으로 단일 프로세스 응용 프로그램에 스레드를 추가하는 것과 마찬가지로 런타임 관리를보다 쉽게 ​​만들 수 있으므로 타이머를 추가하면 문제를 분할하는 데 도움이됩니다.

당신이 인용 한 시간을 감안할 때, 나는이 타이머가 게임이나 유사한 것에 대한 프레임 업데이트 동기라고 추측합니다. 나는 사물의 몇 제안 : 별도의 스레드로

  1. 분할하여 현재 도면 코드를 그에서 (같은) 타이머 코드를 실행합니다. 이것은 당신에게 더 많은 통제력을 줄 것입니다.

  2. 각 1/25 슬롯에 처리량이 얼마나 많은지 확인하십시오. 코드를 최적화하기 만하면 될 수 있습니다.

1

1 귀하의 경우. 타이머를 추가한다고해서 응용 프로그램이 더 빨리 실행되는 것은 아닙니다.

코드를 효율적으로 만들거나 타이머를 자주 실행하지 않아야합니다.

나는 타이머 오버 헤드에 관해서는 알지 못하지만, 높은 화재 속도로는 상당히 클 수 있습니다. 타이머가 이걸 위해 만들어지지 않았기 때문에, 대안으로 스레드를 제안합니다.

2

타이머의 수가 문제가 아닌 것처럼 들립니다. NSTimers의 오버 헤드는 "루틴의 무리"에서 수행하는로드와 비교할 때 기본적으로 중요하지 않습니다. 지금은 걱정하지 마세요. 필요한만큼 타이머를 사용하십시오. 그 후 상어/악기를 열어 가장 많은 시간을 보내는 방법을 확인하십시오.

관련 문제