2016-11-22 67 views
1

這個問題不是關於技術問題,而是方法。單身人士與核心數據

我知道兩分或多或少共同存儲在您的應用程序從服務器接收到的數據的方法:

1)使用管理,數據持有人等來存儲數據。他們通常是某種單身人士,用於存儲從服務器接收到的模型。 (例如 - 帖子/地點/用戶的數組)需要單身人士才能從任何屏幕訪問數據。我認爲大部分應用都使用這種方法。

2)使用Core Data(或者Realm)作爲內存中的存儲。這種方法避免了單身人士,但是,我認爲,維護和支持有點複雜(並且有崩潰的風險)。

你如何存儲數據,爲什麼?

P.S.任何答案都會有幫助。但是,對於詳細的「謝謝」,有理由。

回答

2

CoreData並非嚴格意義上的「內存中」。您可以將對象加載到您的數據模型中,並將它們保存到上下文中,然後它們可能實際上位於磁盤上而不在主內存中,並且可以通過提取請求輕鬆將它們帶回。

另一方面,單身人士通常會一直待在主內存中,直到用戶終止應用程序。如果你在一些數據結構中存儲着較大的對象(例如,當你真正需要的全部分辨率圖像是一個縮略圖),這可能是一個相當大的資源。

6

人們選擇使用Core Data/Relam/Shark或任何其他iOS ORM的原因主要是爲了保持持續之間的數據運行的應用程序之間的數據。

目前有兩種方法可以做到這一點,對於單個值和非常小(並非我鼓勵它)的對象,您可以使用UserDefaults在應用程序啓動之間持續存在。對於更接近數據庫的方法,實際上就核心數據和SharkORM而言,它們建立在SQLite之上,您需要使用ORM。

使用管理器來存儲數據模型的數組將只在應用程序的整個生命週期中保留所述模型。例如,當用戶強制退出應用程序時,重新啓動其設備,或者在某些情況下,當iOS終止您的應用程序時,所有數據將永久丟失。這是因爲它存儲在易失性存儲器的RAM中,而不是存儲在磁盤本身的數據庫中。

儘管在啓動之間沒有明確要求持久性,但使用數據庫層也可以有其優點;例如SharkORM允許你在你的對象上執行原始的SQL查詢,如果你不想使用強大的查詢構建器。這可以用於快速拉取您感興趣的模型,而不是遍歷本地數組。

回覆您的問題,如何存儲數據?那麼,我使用三者的組合。比方說,我爲某個API調用了一些我想在那裏顯示的數據,然後向用戶顯示,我將使用帶有數組的管理器實例來保存數據模型。 但是,如果我想稍後存儲該數據,或者如果我需要對其執行復雜查詢,我會使用Shark將其存儲在磁盤上。 但是,如果我只是想存儲用戶是否已經看到我的登機流量,我只是堅持一個布爾值到UserDefaults

我希望這是對你不夠詳細。

+0

非常感謝。我所試圖做的是我要自己來判斷:我想用核心數據(無需堅持應用程序啓動之間的數據),只是爲了避免單身的緣故。或者單身人士可以在那裏管理核心數據(或任何其他orm)可能需要太多的努力。 – Evgeniy

+1

有一些爭論圍繞着利用單身但這裏是我作爲一個經驗豐富的iOS開發的意見:單身是罰款,並INFACT爲數據源/經理的作用,他們是最好的解決方案。只有一個實例保持良好和輕量級,並且數據在那裏並且易於訪問。不要添加具有讀取磁盤數據(這是遠遠低於RAM),如果你沒有,因爲這將遠遠超過資源保持單身在內存密集型的額外檢修。但是,當你完成它們時,請清空對象陣列。 –

+0

我的經驗是完全相反的,單身是通過定義一個內存泄漏和懶惰的程序員使用它們,以避免不必考慮對象生存期。專業代碼不可接受。通過將ref放在應用程序委託的某個對象上,可以獲得相同的結果,而不會引入無法解除分配的ref count循環 – MoDJ