2010-07-08 36 views
1

我對包含文本字段的視圖控制器存在一些內存問題。使用UITextField釋放UIViewController時的內存問題

小結:

  • 點擊一個按鈕,我的應用程序模態呈現UIViewController(我稱之爲 「VC1」)。
  • 從VC1開始,用戶可以選擇打開(使用pushViewController)a UITableViewController(「VC2」)並返回。
  • 從VC1開始,用戶可以選擇打開(使用pushViewController)a UIViewController(「VC3」)並返回。
  • 最後用戶可解除VC1

VC2和VC2在VC1引用作爲屬性和它們必須保持在存儲器中。當用戶解除VC1然後我釋放所有。

VC3包含一個簡單視圖,只有一個UITextField,becomeFirstResponderviewWillAppear被調用時。

問題:

當我打開VC1,然後VC2,回頭和罷免:這一切都OK,應用程序返回到「現場字節」相同的初始量(即1,20MB)。當我打開VC1,然後打開VC3時,字節變爲2MB。當我寫的文本字段裏面的東西分配上升到2,50MB

  1. 在這一瞬間儀器發現16字節與校對內存泄漏作爲負責任的圖書館和PRRfInit作爲負責任的來電

  2. 義無反顧地後VC1和解聘的分配仍然2,50MB 排序按類別儀器我檢查了VC1,VC2和VC3有0字節直播,但總體仍有2,50MB

是一個還涉及到鍵盤?

回答

1

我假設你在設備上測試,而不是模擬器 - 模擬器產生不正確的結果。

作爲內存泄漏的測量,您的應用使用的內存總量相當沒有意義 - iPhone會嘗試緩存儘可能多的數據,因爲它有空閒的內存 - 它會加載庫並將它們留在內存中以防萬一你將再次使用它們。這只是一個問題,當你開始用完,然後它會爲你排序。

而一個來自圖書館的16byte泄漏是相當無關緊要的(假設它只發生一次) - 蘋果公司的圖書館最終泄漏的數量超過了我的經驗。

有很多更好的方法來消磨時間;)

PS是校對這就是蘋果的SDK的一部分已包含一個庫或一個?

+0

Emh ...現在我只是在模擬器上開發和測試,由於設備不可用... 我會嘗試儘快在真實設備上進行測試。我覺得奇怪的是,爲什麼彈出鍵盤並在文本字段中寫入意味着增加1MB,這是永遠不會釋放的。 PS:我認爲ProofReader是SDK的一部分 – user370773 2010-07-08 17:01:10

+0

那1MB可能是鍵盤的UI?它會將它保存在內存中,以備再次顯示 - 如果它已經在內存中,它可以更快地響應!如果需要內存,它可以稍後釋放它 - 這不是泄漏,而是優化! – deanWombourne 2010-07-09 12:11:00