带有大数组的 NSUserDefaults
NSUserDefaults with big array
我正在构建 macOS 应用程序。
我目前正在使用 NSUserDefaults
通过此方法保存 NSMutableArray
数据:
-(void)addPhotoUrl:(NSString*)url {
[self.photosArray addObject:url];
[[NSUserDefaults standardUserDefaults] setObject:self.photosArray forKey:@"kPhotos"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
每次应用程序启动时,我 运行 这段代码都会加载 NSMutableArray
:
-(void)loadPhotosLike {
NSArray *myRepository = [[NSUserDefaults standardUserDefaults] arrayForKey:@"kPhotos"];
if(myRepository && [myRepository count] != 0) {
[self.photosArray addObjectsFromArray:myRepository];
}
}
到现在为止一切正常,但是由于数组变得非常大(64,000 项),我开始认为这个解决方案不够好。
问题是数组既存在于本地 NSMutableArray
又保存到 NSUserDefaults
每次添加新项到它时,这是一个很好的解决方案并且不影响本地 memory/app memory/writing 磁盘有问题?
我应该开始使用 Core Data 吗?
数组的主要用途之一是搜索对象。使用 CoreData 会更快吗?
根据我的经验NSUserDefaults
仅用于轻量级数据,例如您可以存储在 userDefaults 中的一些偏好相关数据。
此外,如果您存储 heavy/large 数据,它会降低您的应用程序的速度,因为它将存储在单个 plist 文件中。
并且由于应用程序上的大量数据负载,它会产生内存问题,并且在您处理 MacOS
时,您很少会发现内存问题,但就 iOS 而言,它肯定会产生问题。
我找到了 Jeffrey fulton 的非常好的博客,他在其中详细定义了我们需要或不使用 UserDefaults 的地方。
Link : UserDefaults Limitations and Alternatives
此外,添加到上面的 UserDefault 不是安全存储,因为数据很容易检索。
在您的情况下,您可以使用 Core Data 或 SQLIte,它们都是非常强大且易于使用的数据存储框架。
希望这会有所帮助。
问题是您存储的是图像数据而不是文件路径。即使使用数据库来存储图像集合也不是一个好的实现。图像的大数据块会导致数据库运行缓慢。常见的实现方式是先将图像数据存储到文件系统中,然后将相应的文件路径保存到图像索引存储中。在这种情况下,使用UserDefaults还是CoreData进行持久化存储影响较小
我正在构建 macOS 应用程序。
我目前正在使用 NSUserDefaults
通过此方法保存 NSMutableArray
数据:
-(void)addPhotoUrl:(NSString*)url {
[self.photosArray addObject:url];
[[NSUserDefaults standardUserDefaults] setObject:self.photosArray forKey:@"kPhotos"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
每次应用程序启动时,我 运行 这段代码都会加载 NSMutableArray
:
-(void)loadPhotosLike {
NSArray *myRepository = [[NSUserDefaults standardUserDefaults] arrayForKey:@"kPhotos"];
if(myRepository && [myRepository count] != 0) {
[self.photosArray addObjectsFromArray:myRepository];
}
}
到现在为止一切正常,但是由于数组变得非常大(64,000 项),我开始认为这个解决方案不够好。
问题是数组既存在于本地 NSMutableArray
又保存到 NSUserDefaults
每次添加新项到它时,这是一个很好的解决方案并且不影响本地 memory/app memory/writing 磁盘有问题?
我应该开始使用 Core Data 吗?
数组的主要用途之一是搜索对象。使用 CoreData 会更快吗?
根据我的经验NSUserDefaults
仅用于轻量级数据,例如您可以存储在 userDefaults 中的一些偏好相关数据。
此外,如果您存储 heavy/large 数据,它会降低您的应用程序的速度,因为它将存储在单个 plist 文件中。
并且由于应用程序上的大量数据负载,它会产生内存问题,并且在您处理 MacOS
时,您很少会发现内存问题,但就 iOS 而言,它肯定会产生问题。
我找到了 Jeffrey fulton 的非常好的博客,他在其中详细定义了我们需要或不使用 UserDefaults 的地方。
Link : UserDefaults Limitations and Alternatives
此外,添加到上面的 UserDefault 不是安全存储,因为数据很容易检索。
在您的情况下,您可以使用 Core Data 或 SQLIte,它们都是非常强大且易于使用的数据存储框架。
希望这会有所帮助。
问题是您存储的是图像数据而不是文件路径。即使使用数据库来存储图像集合也不是一个好的实现。图像的大数据块会导致数据库运行缓慢。常见的实现方式是先将图像数据存储到文件系统中,然后将相应的文件路径保存到图像索引存储中。在这种情况下,使用UserDefaults还是CoreData进行持久化存储影响较小