gpt4 book ai didi

objective-c - 排序和过滤核心数据关系的更有效方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:16:49 26 4
gpt4 key购买 nike

假设我有一个 Podcast 实体,它有很多剧集,我很困惑其中哪一个是剔除和排序的首选选项:

// Always work with the relationship property
- (NSSet*)unfinishedEpisodes {
NSArray* episodes = self.episodes.allObjects;

NSPredicate* predicate = [NSPredicate predicateWithBlock:^BOOL(PodcastEpisode* episode, NSDictionary* bindings) {
return !episode.isFinished;
}];

NSArray* unfinishedEpisodes = [episodes filteredArrayUsingPredicate:predicate];

return [NSSet setWithArray:unfinishedEpisodes];
}

- (NSArray*)unfinishedEpisodesSortedByAge {
NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES];

return [self.unfinishedEpisodes.allObjects sortedArrayUsingDescriptors:sortDescriptors];
}

// Fetch specific sets of data as needed
- (NSArray*)unfinishedEpisodes:(NSArray*)sortDescriptors {
NSFetchRequest* fetch = [[NSFetchRequest alloc] initWithEntityName:@"Episode"];

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"podcast == %@ AND playcount == 0", self];
fetch.predicate = predicate;

fetch.sortDescriptors = sortDescriptors;

NSArray* results = [KRTDataManager.sharedManager.mainObjectContext executeFetchRequest:fetch error:nil];

return results;
}

- (NSArray*)unfinishedEpisodesSortedByAge {
NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES];

return [self unfinishedEpisodes:@[ sortDescriptor ]];
}

我会尽可能多地使用 SQL 的那部分人很难想到选项 1 更好,但我读过的大部分内容似乎表明使用 (NSSet*) 剧集在播客后非常便宜对象应运而生。我对在这些情况下如何处理核心数据故障的理解很不稳定,我意识到核心数据不应该真正与 SQL 数据库进行比较。不过,仅根据这两个选项的构造方式,我认为将谓词和排序描述符直接放入提取中会有一些好处;但也许这还不足以弥补关系所提供的 yield 。

谢谢。

最佳答案

当处理大型结果集时,第一个代码将效率低下,因为它在内存对象上运行。所有对象都必须加载到内存中,因此如果它们不存在,它们将在出现错误时一个接一个加载。

第二个代码将在 sql 端执行所有操作,并为您提供已经过滤和排序的结果。 CoreData 还使用内部缓存来优化此类查询,因此如果剧集尚未在其他地方加载,我更喜欢此选项。启用 CoreData 调试以查看 sql 查询的外观。 There is already an answer how to do that .

关于objective-c - 排序和过滤核心数据关系的更有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14190277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com