2016-12-28 61 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的回复。 –