Ios 存储较大图像时出现核心数据问题

Ios 存储较大图像时出现核心数据问题,ios,core-data,Ios,Core Data,当我使用for loop在核心数据中存储较大尺寸的图像时,我通过didReceiveMemoryWarning方法接收到内存警告消息 迭代计数是300。现在基于内存警告,我可以向用户显示“内存已满,请同步您的图像”的警报。但我的问题是我无法获得大于300的内存警告。i、 我在第300次迭代中得到了内存警告。高于300和低于300我没有得到内存警告 这是我使用的代码 for (int i=0;i<=300;i++) { NSArray *paths = NSSearc

当我使用for loop在核心数据中存储较大尺寸的图像时,我通过didReceiveMemoryWarning方法接收到内存警告消息 迭代计数是300。现在基于内存警告,我可以向用户显示“内存已满,请同步您的图像”的警报。但我的问题是我无法获得大于300的内存警告。i、 我在第300次迭代中得到了内存警告。高于300和低于300我没有得到内存警告

这是我使用的代码

for (int i=0;i<=300;i++)
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *persistentStorePath = [documentsDirectory stringByAppendingPathComponent:@"DetailsRegister.sqlite"];
 NSEntityDescription *entity = [NSEntityDescription entityForName:@"EMpDetails" inManagedObjectContext:context];

         NSManagedObject *newDevice=[[NSManagedObject alloc]initWithEntity:entity insertIntoManagedObjectContext:context];
         UIImage *image = [UIImage imageNamed:@"image.png"];
        imageview.image=image;
        [self SaveImage:image];
        dataImage = UIImageJPEGRepresentation(image, 0.0);

       [newDevice setValue:dataImage forKey:@"image"]; // obj refers to NSManagedObject

            error = nil;
            // Save the object to persistent store
            if (![context save:&error]) {
                NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
            }

for(inti=0;iCoreData并不是存储图像数据的理想场所

我倾向于只在documents文件夹中存储imageData(或者只存储实际图像,如果它们不敏感的话),然后针对持久化对象存储imageURL

通过这种方式,您可以返回URL的图像,这样性能会更好

参考马库斯·S·扎拉(第二版)的建议如下:

  • 小二进制数据[…]任何小于100千字节的数据[…]当处理这么小的数据时,它是 将其直接作为属性值存储在其 对应的表格
  • 中等二进制数据[…]任何大于100的数据 KB和小于1 MB的大小[…]数据 也可以直接存储在存储库中。但是, 数据应该存储在数据库另一端自己的表中 与主表的关系
  • 大于1的大二进制数据[…] MB大小[…]此大小的任何二进制数据 应存储在磁盘上,而不是存储在存储库中。工作时 对于这种大小的数据,最好存储其路径信息 直接存储在主实体[…]中,并将二进制数据存储在磁盘上的已知位置(例如应用程序的应用程序支持子目录)

关于更多细节,你应该得到这本书(披露:非附属).

核心数据中的数据存储是否有任何限制?。如果有一个限制超过核心数据的限制,以及当核心数据已满时如何显示警报消息,我不知道这是有限制的,我认为限制是设备上剩余的GB。当设备空间不足时,系统将显示警报视图。为什么要分配
imageview.image
是否有300次相同的图像?