Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 核心数据触发故障向NSMutableArray添加对象?_Objective C_Ios_Xcode_Core Data - Fatal编程技术网

Objective c 核心数据触发故障向NSMutableArray添加对象?

Objective c 核心数据触发故障向NSMutableArray添加对象?,objective-c,ios,xcode,core-data,Objective C,Ios,Xcode,Core Data,我对核心数据和NSMutableArray有问题。 阅读本文件: 在“故障行为”一章中,我读到:由于isEqual和hash不会导致触发故障,因此托管对象通常可以放置在集合中而不会触发故障 好的,基于这个原因,我理解我可以: -获取managedObjectContext -将所有托管对象放入数组(对象包含图像数据) 在不触发故障和浪费内存(直到第一次访问对象)的情况下,正确吗 但是,由于某种原因,当我试图将结果放入NSMutableArray时,核心数据触发了一个错误 NSArray *fet

我对核心数据和NSMutableArray有问题。 阅读本文件: 在“故障行为”一章中,我读到:由于isEqual和hash不会导致触发故障,因此托管对象通常可以放置在集合中而不会触发故障

好的,基于这个原因,我理解我可以: -获取managedObjectContext -将所有托管对象放入数组(对象包含图像数据)

在不触发故障和浪费内存(直到第一次访问对象)的情况下,正确吗

但是,由于某种原因,当我试图将结果放入NSMutableArray时,核心数据触发了一个错误

NSArray *fetchResults = [self.managedObjectContext executeFetchRequest:request error:&error]; //this line does'n fire a fault
self.cache = [NSMutableArray arrayWithArray:fetchResults]; //this line fires a fault
self.cache只是一个NSMutableArray。 在最后一行代码之后,我看到内存使用在仪器中不断增长(我的数据库中有50MB的图像,内存立即从2-3Mb增加到52-53MB)

有什么建议吗?
谢谢

好的,我的错误是只查看仪器内存占用情况来确定故障是否触发

核心数据文档说明:如果需要确定某个对象是否存在故障,则可以在不触发故障的情况下向其发送isFault消息。如果isFault返回“否”,则数据必须在内存中。但是,如果isFault返回“是”,则并不意味着数据不在内存中。数据可能在内存中,也可能不在内存中,这取决于许多f影响缓存的参与者

我在“incriminate”行之后添加了此代码:

所有对象的结果都是1

然后我修改了for循环:

for (ImageCache *cache in self.cache) {
    NSLog(@"Is fault? %i", [cache isFault]);
    UIImageView *imageView = [[UIImageView alloc]initWithImage:cache.image];
    NSLog(@"Is fault? %i", [cache isFault]);
}
每个对象的第一个NSLog的结果为1,第二个NSLog的结果为0(在访问映像后触发的故障)

正如文档所说,似乎核心数据正确地破坏了我的对象,内存占用是由于核心数据缓存造成的。 我有罪:-) (尽管我仍然很好奇它在实际内存不足的情况下的表现。我希望这个缓存会刷新…尝试发送内存警告对内存大小没有影响)
谢谢

刚刚检查,您还没有覆盖
isEqual:
散列
?如何知道是否/何时触发故障?您正在记录SQL语句吗?使用仪器?猜猜看?@Carl:不,我没有重写那些方法。@Jody,我在用仪器。我看到在最后一条指令之后,内存占用增加了。我的托管对象只有两个变量:一个字符串和一个图像。数据库中的所有图像(到目前为止)约为50MB。我看到在最后一条指令之后,内存占用增加到50MB。我希望仅在访问图像(导致故障触发)后才能看到此增量…是否?
for (ImageCache *cache in self.cache) {
    NSLog(@"Is fault? %i", [cache isFault]);
    UIImageView *imageView = [[UIImageView alloc]initWithImage:cache.image];
    NSLog(@"Is fault? %i", [cache isFault]);
}