だから私Core Data
はいくつかの画像を保存するために使用します。(また、サブクラスは最新のもので生成されますmogenerator
)
(また、私はARCを使用しています)
ええ、私は参照を保持してディスクに保存できることを知っていますが、私は思った:
「ねえ、彼らはオプションを作ったので、私はそれを自分で管理する必要なしにそれを行うことができます!」
だから私はそれを試しました、そしてそれはそのようにロードされたすべてのデータが決して解放されないことを除いて完全に動作します。
画像の表示を担当するViewControllerの初期化では、通常のメインを指定しNSManagedObjectContext
ます。
そして、で呼び出されたメソッドで、画像を使用してviewDidAppear
設定します。UIScrollView
編集:つまり、実際にはフェッチリクエストではなく、Entity1
1対多の画像があり、同じコンテキストからこの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枚までの画像が割り当て解除されていないリストです。
そして、これが最初のオブジェクトの詳細です:
ここまで読んでくれてありがとう、私は本当に必死です:(