iPhone Core Data属性:对托管对象的更改太慢

时间:2010-08-29 17:03:13

标签: iphone core-data methods accessor

我的iPhone应用程序中有一个CoreData模型,它链接到一个记录超过50k的SQL数据库。当我生成记录类时,Xcode对属性使用@dynamic指令。我有一个名为“ISFAV”的属性,NSNumber类型(CoreData不使用BOOL或Integer,它使用对象类型)。简而言之,当用户以这种方式点击按钮时,我会更改ISFAV属性:

 if (![record.ISFAV intValue]) 

record.ISFAV = [NSNumber numberWithInt:1];

否则   record.ISFAV = [NSNumber numberWithInt:0];

非常简单。但是,如果我尝试按顺序在同一个按钮上轻击多次,则iPhone需要花费太多时间(按钮保持在保持状态一段时间逐渐增加)。即使我更改记录,添加\顺序删除收藏夹中的许多记录(而不是添加\从收藏夹中删除相同的记录),也会发生这种情况。

如果我将原始存取方法更改为@synthesize,问题似乎就解决了。

对CoreData中的访问器方法使用synthesize指令是否正确?

非常感谢!

@edit 使用synthesize指令时,保存上下文时不会对CoreData模型进行任何更改: - \问题仍未解决: - \

1 个答案:

答案 0 :(得分:0)

@dynamic是一个标志,它告诉编译器该方法将在运行时存在,并且现在不会对其发出警告。您不应该将@synthesize与Core Data属性一起使用。

您如何知道您的热点是设置核心数据属性?你有没有对代码进行分析?根据我的经验,更改Core Data中的一个属性不会很慢,它将是1/1000秒或更快。每次更改一个属性时,是否保存到磁盘?你在通话中做了别的什么吗?

我会首先分析代码并找出热点的真正位置。使用仪器并确认。