訪問共享模型資源的一種常見模式是通過單例模型控制器類,就像您寫的一樣。下面是我如何管理創建/訪問單身:
+ (id)sharedInstance {
static dispatch_once_t once;
static SomeModelControllerClass * sharedInstance;
dispatch_once(&once,^{ sharedInstance = [[self alloc] init]; });
return sharedInstance;
}
功能dispatch_once
保證本dispatch_once_t
標記標識給定碼塊「曾經」只執行一次。
另一個更重要的問題是如何創建/存儲模型控制器將管理的數據。有幾個選項:
- 保持完整的內存如果你有一個可以在內存中一次全部上每個應用程序啓動舉行,輕鬆再生數據相對較少,那麼這是最簡單的方法。雖然這可能不是一個好的用戶體驗。
- NSCoding您的模型對象是否實現了NSCoding協議方法(init/encode withCoder)。您的模型控制器將負責在適當的時候將模型堆棧寫入/讀取到磁盤/從磁盤讀取(最好在後臺線程上)。這種技術可以確保你的用戶在啓動時立即看到一些數據,但是它要求所有數據在從磁盤讀取後都保存在內存中。對於像Twitter這樣的應用來說,這是一項很好的技術,事實上他們多年來一直使用這種技術。
- 核心數據核心數據是「鞋盒」風格的應用程序的一個很好的選擇,這些應用程序需要存儲大量本地數據,並且太大而無法一次保存在內存中。它帶有很大的學習曲線和大量的樣板,所以我只建議這個,如果你不能一次把所有的模型對象保存在內存中。
- 自定義存儲有許多第三方框架可以讓Core Data在沒有頭痛的情況下做什麼。他們大多數都建立在SQLite上。探索Github尋找吸引你的選擇。 YapDatabase看起來對我來說是最酷的一個。