2010-02-26 101 views
1

我對我的iPhone應用程序進行了一些壓力測試。結果如下。我想知道我是否應該擔心,如果是的話,我可能會對此做些什麼。我的iPhone應用程序的一些壓力測試

我設置了一個定時器,每秒觸發一次。每當定時器啓動時,應用程序都會從​​服務器請求一些XML數據。數據到達後,應用程序會解析數據並重新顯示受影響的表格視圖。在幾次試驗中,應用程序在撞擊之前平均通過循環約500次。

然後我從上面的循環中刪除了解析和重新顯示步驟。現在它可以去800次左右。

我設置了一個循環來反覆重新顯示錶格視圖,而無需下載任何東西。一旦重新顯示完成,下一個就開始了。 2601循環後,應用程序崩潰。

以上所有數字都比用戶可能做的要大。

此外,當我嘗試在樂器下的設備上運行它時,我的應用永遠不會持續很久。所以我不能以這種方式獲得有用的數據。 (但沒有儀器它持續相當長一段時間,如上所述。)

+0

它如何崩潰? –

+0

「程序接收信號:0」 –

回答

2

我會說你需要非常關心。編程的第一條規則是用戶永遠不會做你期望的事情。

需要考慮的事情:

  • 存取方法。使用它們。設置 屬性所有屬性和 始終與 適當的getter/setter方法訪問它們:

object.property = some_other_object;  -OR- 
[object setProperty:some_other_object]; 

object = some_other_object.some_property; 
object = [some_other_object some_property]; 

抵制誘惑,做這樣的事情:

property = some_other_object; 
[property retain]; 
  • 你從得到ObjectAlloc中輸出? 有4個內存泄漏工具, 性能和對象分配。 他們全都沒有人加載?
  • 當應用程序崩潰時,你會得到什麼? EXEC_BAD_ACCESS或其他一些錯誤?
  • 平衡保留(無論是alloc還是 副本)和版本。用 相同的方法來保持每個分配/副本均衡 的釋放/自動釋放是一個好主意 。如果您使用您的 訪問器所有的時間,需要 做手動發佈很少。
  • Autorelease經常會隱藏真正的 問題。有可能Autorelease 可以掩蓋一些棘手的分配 問題。仔細檢查您的使用 autorelease。

編輯(根據您的故障代碼添加) 根據您的上述「編程接收信號:0」的回答。這表示您的內存不足。我會通過尋找你的代碼確實是這樣情況下啓動:

myObject = [[MyClass alloc] init]; 
[someMutableArray addObject:myObject]; 

,你沒有「釋放」,當你把新的對象到數組。如果這個數組被釋放,那麼對象myObject將成爲一個孤兒,但無論如何都會在內存中存在。這樣做的簡單方法是grep所有的「alloc」/「copy」消息。除極少情況外,在同一功能中應該有一對「釋放」/「自動釋放」。通常情況下,上述應該是:

myObject = [[[MyClass alloc] init] autorelease]; 
[someMutableArray addObject:myObject]; 
+0

您的答案可以概括爲:使用標準的可可內存管理模式,以確保您不會泄漏內存 – rpetrich

+0

相當多。我過去(想想OpenStep),我已經完成了5萬多個線程,並且每天只用了一天的時間進行泄漏和清理。如果你虔誠地遵守規則,他們就像魅力一樣工作。它們還使事情在以後的日子更容易閱讀和拾取。 –