gpt4 book ai didi

ios - 核心数据获取请求优化

转载 作者:可可西里 更新时间:2023-11-01 03:52:23 27 4
gpt4 key购买 nike

我正在开发需要检查字符串是否已保存到数据库中的应用程序。这似乎是一个简单的操作,但它需要半秒钟才能返回我认为相当多的任何响应。我的问题是是否有任何方法可以减少该时间。感谢您的关注。

这是我当前的代码:

- (BOOL) isDeleted:(int)i {

NSString *value = [NSString stringWithFormat:@"deleted.*.%i", i];

MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];

NSString *entityName = @"Deleted";
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:entityName inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDesc];

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(deletedpics like %@)", value];
[request setPredicate:pred];

NSError *error;
NSArray *objects = [context executeFetchRequest:request error:&error];

BOOL returnBool = [objects count] >= 1 ? YES : NO;
return returnBool;

}

最佳答案

一个优化是替换

NSArray *objects = [context executeFetchRequest:request error:&error];

通过

[request setFetchLimit:1];
NSUInteger count = [context countForFetchRequest:request error:&error];

如果您只想检查对象是否存在。

但我认为主要的性能问题是通配符搜索 LIKE ,这比用 == 搜索慢.

而不是将状态和图片编号存储在一个属性为 deleted.<status>.<picturenumber> (正如您在评论中所写)使用单独的属性可能会更好 statuspicturenumber在实体中。

然后就可以用谓词搜索图片编号了

[NSPredicate predicateWithFormat:@"picturenumber == %d", i];

应该会快很多。如有必要,您还可以对该属性进行索引(如评论中提到的@flexaddicted)。

关于ios - 核心数据获取请求优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15187223/

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