gpt4 book ai didi

iphone - Core Data 从不释放从外部存储加载的 NSData

转载 作者:可可西里 更新时间:2023-11-01 04:47:34 25 4
gpt4 key购买 nike

所以我使用 Core Data 来存储一些图像。 (子类也是用最新的mogenerator生成的)

(而且我也在使用 ARC)

是的,我知道我可以保留一个引用并将其存储在磁盘上,但我想:

“嘿,他们提供了一个选项,这样我就可以做到这一点,而无需自己管理!”

所以我尝试了它并且它完美地工作,除了以这种方式加载的所有数据从未发布


enter image description here

enter image description here


在负责显示图像的 ViewController 的初始化中,我给它通常的主要 NSManagedObjectContext

viewDidAppear 中调用的方法中,我使用图像设置了 UIScrollView:

编辑:所以这不是一个真正的获取请求我有一个 Entity1 与图像一对多,我用它来获取图像我从相同的上下文中得到这个 entity1。我只是想简化以更好地解释。

- (void)setupScrollViewWithEntity1:(Entity1 *)entity1 {
DDLogVerbose(@"-- %@ : SETUP SCROLL VIEW --", self);
// I remove any previous subviews
[self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
self.scrollView.contentSize = self.scrollView.frame.size;

/* Here I get the imagesArray with a NSFetchRequest */
//So it's not really a fetch request I have an `Entity1` which have one-to-many with images and I use it to get the images
NSSet *imagesSet = entity1.images;


// So I have an NSArray holding all the Image object
for (Image *image in imagesSet) {
CGRect frame = self.scrollView.frame;
frame.origin.x = image.numberValue*frame.size.width;
UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:frame];
scrollView.contentSize = self.scrollView.frame.size;
UIImageView *imageView = [[UIImageView alloc]initWithFrame:self.scrollView.frame];
imageView.image = [UIImage imageWithData:image.image];
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.userInteractionEnabled = YES;
[scrollView addSubview:imageView];
scrollView.delegate = self;
scrollView.minimumZoomScale = 1.0;
scrollView.maximumZoomScale = 3.0;
[self.scrollView addSubview:scrollView];
}
}

viewWillDisappear 中,我保存了 NSManagedObjectContext 并且我希望当 Controller 被解除分配时,所有数据也会被解除分配,但它会永远保留在内存中。

这一行以某种方式保留了它不知道为什么:imageView.image = [UIImage imageWithData:image.image];

我花了 3 天时间尝试使用所有东西,Instruments,重新检查我是否没有在某处保留强引用。

问题是 UIViewController 得到了 dealloc,我确定,我在 Instruments 中看到了 分配工具,但由于某种原因,数据会永远保留在内存中,直到应用程序崩溃


这是内存中约 20 个图像未被释放的列表:

enter image description here


这是第一个对象的详细信息:

enter image description here

感谢您阅读到这里,我真的很绝望:(

最佳答案

在处理完图像后,您是否尝试过在 NSManagedObjectContext 上调用 reset?这会从内存中的对象图中逐出所有已加载的对象。下次需要时,需要从磁盘/数据库中获取它们。

关于iphone - Core Data 从不释放从外部存储加载的 NSData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15167059/

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