2010-06-23 65 views
0

我有兩種可能性:我應該避免創建大量變量嗎?

1)將一個對象存儲在一個變量中,並在我的代碼中使用該變量。但是這使用內存來存儲對象嗎?

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
BOOL bool1 = [userDefaults boolForKey: key1]; 
BOOL bool2 = [userDefaults boolForKey: key2]; 

2)不要將它存儲在變量中,並在需要時從頭開始創建它。

BOOL bool1 = [[NSUserDefaults standardUserDefaults] boolForKey: key1]; 
BOOL bool2 = [[NSUserDefaults standardUserDefaults] boolForKey: key2]; 

在這種情況下會推薦什麼?如果對象之間存在差異,那麼我怎麼知道使用哪一個?

回答

3

就你在問題中顯示的具體例子而言,在獲得NSUserDefaults的這兩種方法之間沒有實際的區別。除非你正在處理大數據對象(如UIImages),否則你應該專注於代碼的清晰性和可讀性。如果事實證明在測試過程中遇到內存問題,請回過頭來尋找方法以便稍後使用更少的內存。

+0

感謝您的信息。 – 2010-06-23 12:16:34

1

您還沒有非常具體的,以什麼樣的數據。但無論如何,變量指向的是消耗內存的東西,而不是變量本身。

至於你的問題的其餘部分,如果你發表評論解釋爲哪一部分你的系統是在這個時刻做你的應用程序解決此問題爲中心,我將修改這反映了答案。

編輯:別人回答被接受之前,我可以更新我的答案。看到接受的答案。

+0

感謝您的快速回復。我編輯它。很難解釋我想要達到的目標。但我添加了一個NSUserDefaults的例子。 – 2010-06-23 10:30:43

0

如果執行的操作是一個非常沉重的性能的方法,它可能是一個性能損失,每一次重做吧,當你根本就保存信息。

我覺得你必須選擇

  1. 如果你有一個分配的內存有問題,重做。
  2. 如果內存問題是不是一個重要因素,所進行的操作是不是起伏,你有一個性能損失,重做。

我認爲,這樣做iPhone應用程序,內存是不是超臨界(可能現在不過多任務定),這是更加重要心目中的工作量,即儘量不要重做同樣的工作。但正如所說,這一切都取決於情況。

+0

非常感謝... – 2010-06-23 12:17:34

0

你的問題的措辭暗示你可能不完全理解C指針。你不是「將對象存儲在變量中」。你的第一個例子中的userDefaults變量只是一個C指針。 +standardUserDefaults方法返回一個指向全局用戶默認值對象的指針,該對象指定給userDefaults。在第二個例子中,你檢索了一個指向該對象的指針兩次,每行一次。

兩者之間的唯一真正區別在於,在第二個示例中,您正在執行冗餘消息發送以再次檢索對象引用。您的示例不是性能至關重要的,但有些情況下您可能需要緩存對對象的引用,以避免發送冗餘消息,例如在循環中。這一切都取決於你的程序的性能。

如果你對C指針不太熟悉,一定要閱讀它們。它應該爲你清理一些事情。

0

在第一個例子中,您沒有使用任何更多的程序內存。 NSUserDefaults對象將以任意方式存儲在堆上,而變量本身的存儲將是a)一個寄存器,或者b)在堆棧上。寄存器不佔用任何應用程序的實際內存,並且堆棧的內存已被保留。

此外,指針佔用非常少量的內存 - 64位平臺上的32位和8字節的4個字節。其中25萬人將不到1 MB。像這樣的個人標量是你應該尋找內存節省的最後一個地方。