2010-02-22 48 views
0

假設您有一個可以刷新的表格視圖。您是否將activityAnimator保存在內存中,或者每次單擊刷新時都重新創建它?是「創建然後釋放,然後重新創建然後釋放」比「創建然後使用兩次然後釋放」更好?

我知道這可能聽起來很明顯,但在第一種情況下你加快你的應用程序,並在其他情況下,你有更多的自由存儲空間似乎非常清楚。

但我想知道兩者中的一個是否更接近「Apple標準」。

哪一個更重要? CPU使用還是內存使用?

而不要告訴我,這取決於我需要做什麼。

回答

0

通過「activityAnimator」我假設你的意思UIActivityIndicatorView

如果是這樣的話,你應該通過Interface Builder中添加的指標,並將其連接到您的視圖控制器。這意味着如果控制器不是最頂層的,則操作系統可以釋放連接的對象,如果需要的話,還可以包括指示器。這也意味着您不必在每次使用它時創建和銷燬它。兩全其美。

話雖如此,這感覺就像不成熟的優化。我會想象支持你的表格視圖的數據源會佔用更多的內存,UIActivityIndicatorView會。我建議在IB中設置UIActivityIndicatorView並使用它。

+0

我試圖加我UIActivityIndi​​catorView在IB,但它只是沒有讓我這樣做...在IB我有一個導航控制器和根視圖控制器的窗口。我說我的tableView在我的RootViewController的但每次我嘗試一次加我的指標上面我的tableView它取代我的tableView,我只得到了我的飛旋...... 的問題是,我希望我的微調是對我的tableView的頂部。 .. – gotye 2010-02-22 13:28:21

+0

@gotye你的表視圖應該是一個UIView的兄弟,並且活動指示器也應該是同一個UIView的兄弟。因此,創建一個新的UIView,將其連接到您的控制器視圖IBOutlet,然後添加一個表視圖和一個活動微調器。如果這仍然無法避免,請參閱IB教程。 – freespace 2010-02-22 23:22:53

0

我不認爲這存在「蘋果標準」。

不過,我認爲最好的方法是保持你的對象在內存中,因爲它允許以提高性能的應用程序。如果應用程序需要內存,os將調用didReceiveMemoryWarning方法,此時您將不得不釋放未使用的對象。

但是,如果你有很多的對象應該是從時間釋放一些對象,時間是個好主意。

如果您需要了解更多信息,你可以看到Memory Management Programming Guide for Cocoa

0

創建一個方法,該方法將創建並返回activityAnimator。它應該檢查它是否爲零,以及它是否創建它。如果不是隻返回現有的。然後你可以堅持它,只釋放該視圖控制器的dealloc或didRecieveMemoryWarning。然後,當你需要使用它而不是引用類的引用時調用你的方法來確保引用被引用。這樣你就可以獲得最佳性能,但不會遇到內存問題。

+0

視圖控制器實際上是我的導航控制器的根視圖控制器...當我推新視圖時,我的根視圖控制器的dealloc方法會被調用嗎? – gotye 2010-02-22 13:30:23

+0

我不認爲會。但是,因爲它會一直釋放它(如果你允許的話),當它用完內存時,我會停止擔心它。就像@freespace所說的那樣。 UIActivityIndi​​catorView的內存佔用很可能只是你的tableView的數據源的一小部分,我不會太擔心它。選擇這裏建議的任何一種方法。它會正常工作。 – jamone 2010-02-22 13:50:04

+0

好吧,我想我明白了!乾杯 – gotye 2010-02-23 11:05:06