2016-12-28 57 views
0

我需要爲用戶保留一個會話到會話的自定義對象數組。該陣列將充滿1-14相當簡單,重量輕的自定義快捷的對象,像這樣:在Swift3中緩存自定義對象的陣列

[Obj1, Obj2, Obj3] 

我想要做的就是當viewWillDisappear被調用,這樣當用戶回到屏幕保持此數據,我可以再次使用這些確切的對象。做這個的最好方式是什麼?我研究過使用核心數據,但我不想爲這些對象設置數據模型,只是將它們存儲爲沒有任何關係或任何東西。

請注意,該應用程序使用非常計算性稅收算法,其中這些對象發揮中心作用。因此,我需要保持這些物體儘可能輕。因此,我不想讓對象符合NSCoding,因爲它不需要對象的中心角色

+1

「請注意,由於各種原因,這些對象不適合存儲在NSUserdefaults中。」我有興趣聽到這些,因爲這將是我的解決方案 – Alexander

+2

您可以使用NSCoding + NSKeyedArchiver – Moritz

+0

使用'NSCoding',在這裏看到一個類似的方法:[寫入swift字典到文件](http:// stackoverflow .com/q/27197658/2415822) – JAL

回答

2

如果讓你的類符合NSCoding證明實際上有一個顯着的性能的影響(我很懷疑)的Objective-C類,那麼你就可以作出這樣的子類的二手專爲儲存NSCoding的第二容器。將初始化程序添加到當前輕量級Swift類/結構體中,該初始化程序從此容器對象初始化實例,反之亦然。任何時候你需要序列化/反序列化,你只需使用這個容器對象作爲中間體。

這樣可以在讀/寫時以最低的成本購買功能,但不影響正常的使用性能。

+0

如何在'NSCoding'之上添加另一層可以提高性能?我不確定我是否明白爲什麼會那樣做。 – sbooth

+0

@sbooth Objective C類總是使用動態分派。編譯器不能內聯任何方法,修剪未使用的代碼,或執行任何需要查看「進入」方法調用的優化。 – Alexander

+0

@sbooth看到這個:https://www.raizlabs.com/dev/2016/12/swift-method-dispatch/ – Alexander

0

如果您可以使對象成爲NSObject的子類,那麼您可以使它符合NSCoding並且使用NSKeyedArchiver和NSKeyedUnarchiver序列化和反序列化您的對象。

+0

請參閱我對上述Alexander的回覆。 –