Also verwende ich Core Data
, um ein paar Bilder zu speichern. (Auch die Unterklasse mit neuesten mogenerator
generiert)Core-Daten geben niemals NSData aus dem externen Speicher geladen
(Und auch ARC ich verwende)
Ja, ich weiß, dass ich nur eine Referenz behalten konnte und speichern sie auf der Festplatte, aber ich dachte:
"Hey, sie haben eine Option gemacht, damit ich genau das machen kann, ohne dass ich es selbst verwalten muss!"
Also versuchte ich es und es funktioniert perfekt, außer alle Daten, die Art und Weise geladen wird nie freigegeben.
In der Initialisierung des Viewcontroller, die werde verantwortlich sein hat die Bilder der Anzeige Ich gebe es die übliche Haupt NSManagedObjectContext
.
Und in einem Verfahren namens in viewDidAppear
ich die UIScrollView
mit den Bildern ein:
Edit: a So ist es nicht wirklich Anfrage hole ich einen Entity1
haben, die mit Bildern und ich eine Eins-zu-viele haben benutze es, um die Bilder zu bekommen Ich bekomme diese Entity1 aus dem gleichen Kontext. Ich wollte nur vereinfachen, um es besser zu erklären.
- (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];
}
}
}
In viewWillDisappear
ich spare die NSManagedObjectContext
und ich würde erwarten, wenn der Controller dealloc'ed wird, dass alle Daten würden auch, aber es bleibt für immer in Erinnerung.
Diese Linie irgendwie behält es weiß nicht, warum: imageView.image = [UIImage imageWithData:image.image];
Ich habe 3 Tage auf es zu versuchen, alles zu verwenden, Instruments
, nochmals zu überprüfen, ob ich nicht irgendwo einen starken Bezug zu halten habe.
Die Sache ist die UIViewController
bekommt dealloc
‚ed, die ich bin mir sicher, ich sehe es in Instruments
mit dem Allocation
Werkzeug aber aus irgendeinem Grunde bleibt die Daten im Speicher für immer, bis die App Abstürze.
Hier ist die Liste der ~ 20 Bilder im Speicher nicht dealloc'ed bekommen:
Und hier ist die Details für das erste Objekt:
Vielen Dank für das Lesen bis hier, ich bin wirklich verzweifelt :(
verwenden Sie Arc? – J2theC
Ja, ich habe vergessen, es zu erwähnen, aber ich habe es getaggt Lassen Sie mich das bearbeiten – ItsASecret
Beherrscht der Kontext des verwalteten Objekts über den View-Controller hinaus? Wenn ja, ist es möglich, dass Sie einfach einen Objektgraphen mit Zirkelverweisen haben und Sie nicht explizit Fehler an Ihren Objekten feststellen? – Tommy