所以我Core Data
用来存储一些图像。(子类也是用 latest 生成的mogenerator
)
(而且我也在使用 ARC)
是的,我知道我可以保留一个参考并将其存储在磁盘上,但我想:
“嘿,他们做了一个选择,所以我可以做到这一点,而不必自己管理!”
所以我试了一下,它工作得很好,除了所有以这种方式加载的数据永远不会被释放。
在负责显示图像的 ViewController 的初始化中,我给它通常的 main 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
,我希望当控制器被释放时,所有数据也会被释放,但它会永远保留在内存中。
这条线以某种方式保留它不知道为什么:imageView.image = [UIImage imageWithData:image.image];
我花了 3 天时间尝试使用所有东西,Instruments
重新检查我是否没有在某处保留强参考。
事情是我确定的,我在工具中UIViewController
看到了它,但由于某种原因,数据永远保留在内存中,直到应用程序崩溃。dealloc
Instruments
Allocation
这是内存中未解除分配的约 20 张图像的列表:
这是第一个对象的详细信息:
感谢您阅读到这里,我真的很绝望:(