在 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 上存储对象 - 最佳解决方案?的主要内容,如果未能解决你的问题,请参考以下文章
最佳实践:通过存储在 DB 中的方案在运行时创建 ORM 对象