在 iOS 上存储对象 - 最佳解决方案?

Posted

技术标签:

【中文标题】在 iOS 上存储对象 - 最佳解决方案?【英文标题】:Storing object on iOS - best solution? 【发布时间】:2013-01-01 02:46:44 【问题描述】:

我正在为博客构建一个应用程序,用户可以在其中保存他们最喜欢的帖子。

当他们这样做时,我想存储我的对象,其中包含:帖子的 URL、标题和图像 URL。

我应该立即选择UserDefaults(以前的NSUserDefaults)还是从Core Data开始?

【问题讨论】:

【参考方案1】:

我应该选择 User Defaults 还是立即开始使用 Core Data?

这里有更多的可能性:你也可以使用普通文件或 plist,或者在没有 Core Data 的情况下使用 sqlite。答案取决于您计划存储的项目数量:

如果您计划存储 1 到 20 个项目,用户默认设置可以正常工作 如果您计划存储 20 到 200 个项目,则可以使用纯文件或 plist 如果您计划存储 200 多个项目,请选择 Core Data 或 sqlite,具体取决于您对其中一种技术的熟悉程度。

【讨论】:

+1:数字可能对您有所不同(特别是对于默认值/plist,数据的大小很重要,但一般建议是合理的 也可能是使用 NSArchiver 编写二进制文件 ... id 说是 20 到 200 +1:对我来说听起来像是可靠的建议。就个人而言,我可能会在这里使用 Core Data 方法,假设用户可以喜欢很多这些项目......另外,使用 MagicalRecord(参见 github.com/magicalpanda/MagicalRecord),Core Data 非常简单。 谢谢,我认为您的第二个解决方案最适合我,因为用户的收藏夹不应该太大。【参考方案2】:

由于文章的收藏夹通常不会是 100K 项目,因此我会使用 NSDictionary 来获取项目并将它们存储到 NSMutableArray 中,然后将它们保存到文件中。它使用简单,您还可以将收藏夹导出到文件甚至iCloud 以在设备之间共享。

NSMutableDictionary *item = [[ NSMutableDictionary alloc]init];
[item setObject:@"www.google.com" forKey:@"url"];
[item setObject:@"Google" forKey:@"title"];

//Add each item to the Favourites array
//You should declare this outside of the "addToFavourites" function.
NSMutableArray *Favourites = [[NSMutableArray alloc]initWithObjects: nil];
[Favourites addObject:item];

//Save the Favourites NSMutableArray to the file.
if([Favourites writeToFile:path atomically:NO]) 
   NSLog(@"Favourites are saved!");

【讨论】:

感谢示例代码。我现在确实计划使用这个技巧来存储我用户的收藏夹。

以上是关于在 iOS 上存储对象 - 最佳解决方案?的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发入门——17条 Swift 最佳实践规范(上)

最佳实践:通过存储在 DB 中的方案在运行时创建 ORM 对象

Flutter - 每次关闭应用程序时存储对象列表的最佳方式?

在 Core Data 中保存 UIImage 的最佳方法

在 iOS 中保存访问令牌的最佳实践

在 PhoneGap IOS 上缓存图像的最佳方法