这里有一个noob的位,但保存应用程序的简单变量/数组的最佳方式是什么?例如,我有一个应用程序,它有一个friendList数组,我希望在每次应用程序启动时加载它?它会是NSKeyedArchiver吗? NSUserDefualts?或者以其他方式?另一个例子是说我有一个简单的int变量postCount来跟踪发布的帖子数量,这需要保存在退出并加载。最好的方法是什么?谢谢!在哪里存储局部变量? NSKeyedArchiver或NSUserDefaults?
回答
NSUserDefaults最适合少量数据。 如果数据较小,更好的选择是NSUserDefaults
,否则使用NSKeyedArchiver
。
在你的情况friendList
数组可以包含大量的数据,所以我比较喜欢NSKeyedArchiver。为了存储postCount
,你可以使用NSUserDefaults。
的NSUserDefaults
类提供用于访问公共类型,如浮筒,双打,整数,布尔,和网址方便的方法。默认对象必须是属性列表,即,(或对集合的实例的组合)的实例:NSData
,NSString
,NSNumber
,NSDate
,NSArray
,或者NSDictionary
。如果要存储任何其他类型的对象,则通常应将其存档以创建NSData
的实例。 存档和序列化是您可以创建分层数据的独立于体系结构的字节流的两种方式。字节流然后可以写入文件或传输到另一个进程,可能通过网络。当字节流被解码时,层级被重新生成。归档提供了一系列相关对象和值的详细记录。序列化只记录属性列表值的简单层次结构。
可以NSArray
使用NSUserDefault
,但更好的方法存储是 你应该使用类似NSKeyedArchiver
到数组序列化为NSData
,将它保存到NSUserDefaults
,然后用NSKeyedUnarchiver
以后反序列化:
NSData *serialized = [NSKeyedArchiver archivedDataWithRootObject:myArray];
[[NSUserDefaults standardUserDefaults] setObject:serialized forKey:@"myKey"];
//...
NSData *serialized = [[NSUserDefaults standardUserDefaults] objectForKey:@"myKey"];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:serialized];
好吧,非常感谢,只是想检查一下常见的编程习惯在哪里存储简单的程序数据。谢谢您的回答。圣诞节快乐! – Kex
@Kex圣诞快乐! – user3575114
与应用程序设置相关的少量数据很容易保存在UserDefaults中。但不要把用户名和密码放在那里 - 这就是钥匙链的用途。
如果你只是想存储数组和字典,那么使用NSKeyedArchiver序列化是一个合理的解决方案。
但是,如果您有大量数据或数据结构可能会发生变化,那么这就是工程折衷之一,那么使用适当的持久性机制是一个更好的主意。
适当的持久性机制,如CoreData,Realm.io,Mantle,可以更好地控制模型对象的内存使用情况,更好地缩放,并且当模型对象发生变化时,支持适当的迁移。
这实际上取决于您正在保存的内容,如何使用以及如何使用这些内容。
- 1. .NET局部变量存储在哪里?
- 2. FORTRAN在哪里存储局部变量?
- 3. OCUnit在哪里存储NSUserDefaults?
- 4. 变量存储在哪里?
- 5. Java最终局部变量存储在哪里?
- 6. 方法局部变量存储在哪里?
- 7. 同步NSKeyedArchiver或NSUserDefaults
- 8. 存储在内存中的DLL的全局变量在哪里?
- 9. 静态存储在内存中的全局变量在哪里?
- 10. $ _SESSION变量存储在哪里?
- 11. 在PHP中,全局声明的变量存储在哪里?
- 12. JSFiddle在哪里存储我的变量?
- 13. 存储静态变量(数据段或堆或BSS)在哪里?
- 14. 挥发性变量存储在哪里?
- 15. Python中的变量存储在哪里?
- 16. nodejs在哪里存储变量?
- 17. 在哪里存储javascript变量
- 18. selenium webdriver:存储变量在哪里?
- 19. golang环境变量存储在哪里?
- 20. 全局变量像$ _GLOBAL,$ _POST等存储在哪里?
- 21. Firefox 49开发工具,其中“存储为全局变量”存储在哪里?
- 22. 哪个更好? - ViewState中Web控件的局部变量或存储变量
- 23. 浏览器在哪里存储用let或const定义的全局变量?
- 24. 存储在变量栈中的变量在哪里?
- 25. iPhone:NSUserDefaults存储在哪里?
- 26. 全局设置存储在哪里?
- 27. 本地,全局,静态,自动,寄存器,外部,常量,易失性变量存储在哪里?
- 28. 在哪些内存中存在静态变量,局部变量是否存在?
- 29. 如何知道寄存器变量存储在哪里?
- 30. Python 3如何存储局部变量?
谢谢你的回答。正是我所期待的。圣诞节快乐! – Kex
@Kex:圣诞快乐... –