2009-05-21 152 views
5

在iPhone OS設備中,同時運行NSTimers的人數是多少?我有一堆被一個定時器每秒發射25次的例程調用,事情非常波動,緩慢和沉重。我正在考慮添加一個或多個額外的NSTimers來分配工作量,但我擔心有多少人可以使用。這可能有點取決於我意識到的每個計時器的發射速率,所以假設每秒發射速率爲20〜30次。那麼,有多少NSTimers太多了?有多少NSTimers太多?

回答

5

在內部,NSTimers都在單個硬件計時器上實現。操作系統爲所有正在運行的應用程序保留一個定時器的中央列表,併爲最快的事件安排一個硬件定時器。

添加計時器不會改變您的應用程序的行爲。也就是說,以同樣的方式將線程添加到基本上單一的進程應用程序中,可以使運行時管理變得更加簡單,添加計時器可以幫助您劃分問題。

鑑於你引用的時間,我猜這個計時器是一個遊戲或類似的frameupdate同步。我會建議幾件事情:

  1. 將您當前的繪圖代碼拆分爲一個單獨的線程並運行您的(相同的)定時器代碼。這應該給你更多的控制。

  2. 對您的代碼進行剖析,以查看在每個1/25s插槽中執行了多少處理 - 它可能(也可能是)您只需優化代碼。

1

1在你的情況。添加額外的計時器不會讓您的應用程序運行得更快。

你必須提高你的代碼效率或減少定時器的啓動次數。

我不知道一個定時器的開銷,但它可能是相當高的火災率。定時器不是爲此製作的,我建議一個線程作爲替代。

2

聽起來像定時器的數量不是問題。與你在「一堆例程」中進行的加載相比,NSTimers的開銷基本上是無關緊要的。現在不要擔心。根據需要使用盡可能多的計時器。之後,打開鯊魚/樂器,看看你最花時間在哪些方法上。