2013-07-14 62 views
0

我是新來的可可和Mac OS X開發。 我的應用程序的不同組件使用特定的位置來存儲數據等,該位置是在應用程序的開始時確定的。例如用戶主目錄中的子目錄目錄,系統的臨時目錄等,以及我的可可應用程序中不同類使用的類似運行時信息。這些信息應該在應用程序的開始時確定一次,稍後重新使用。如何在可可應用程序中保存公共運行時數據?

每個組件都應該能夠訪問一箇中心組件來獲取這些信息,而不是每個組件重複計算。

可可提供了一些地方來保存這些數據嗎?或者我們創建單例對象嗎?有任何想法嗎 ?

回答

1

訪問共享模型資源的一種常見模式是通過單例模型控制器類,就像您寫的一樣。下面是我如何管理創建/訪問單身:

+ (id)sharedInstance { 
    static dispatch_once_t once; 
    static SomeModelControllerClass * sharedInstance; 
    dispatch_once(&once,^{ sharedInstance = [[self alloc] init]; }); 
    return sharedInstance; 
} 

功能dispatch_once保證本dispatch_once_t標記標識給定碼塊「曾經」只執行一次。

另一個更重要的問題是如何創建/存儲模型控制器將管理的數據。有幾個選項:

  1. 保持完整的內存如果你有一個可以在內存中一次全部上每個應用程序啓動舉行,輕鬆再生數據相對較少,那麼這是最簡單的方法。雖然這可能不是一個好的用戶體驗。
  2. NSCoding您的模型對象是否實現了NSCoding協議方法(init/encode withCoder)。您的模型控制器將負責在適當的時候將模型堆棧寫入/讀取到磁盤/從磁盤讀取(最好在後臺線程上)。這種技術可以確保你的用戶在啓動時立即看到一些數據,但是它要求所有數據在從磁盤讀取後都保存在內存中。對於像Twitter這樣的應用來說,這是一項很好的技術,事實上他們多年來一直使用這種技術。
  3. 核心數據核心數據是「鞋盒」風格的應用程序的一個很好的選擇,這些應用程序需要存儲大量本地數據,並且太大而無法一次保存在內存中。它帶有很大的學習曲線和大量的樣板,所以我只建議這個,如果你不能一次把所有的模型對象保存在內存中。
  4. 自定義存儲有許多第三方框架可以讓Core Data在沒有頭痛的情況下做什麼。他們大多數都建立在SQLite上。探索Github尋找吸引你的選擇。 YapDatabase看起來對我來說是最酷的一個。
相關問題