Używam więc Core Data
do przechowywania kilku obrazów. (Również podklasa jest generowana z najnowszej mogenerator
)Dane podstawowe nigdy nie zwalniają NSData załadowanego z pamięci zewnętrznej.
(a także używam ARC)
Tak wiem, może po prostu zachować odniesienie i zapisać go na dysku, ale pomyślałem:
"Hej, oni zrobili opcję, więc mogę to zrobić bez konieczności samodzielnego zarządzania!"
Tak więc spróbowałem i działa idealnie, z wyjątkiem wszystkich danych wczytanych w ten sposób: nigdy nie opublikowano.
W inicjalizacji ViewController kto gonna be odpowiedzialny za wyświetlanie obrazów daję zwykle główny NSManagedObjectContext
.
A w metodzie zwanej w viewDidAppear
I ustanowiony na UIScrollView
z obrazów:
Edit: Więc to nie jest tak naprawdę pobrać wniosek Mam Entity1
które mają jeden-do-wielu z obrazami i I użyj go, aby uzyskać obrazy Otrzymuję encję 1 z tego samego kontekstu. Chciałem tylko uprościć wyjaśnienie lepiej.
- (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];
}
}
}
W viewWillDisappear
I zapisać NSManagedObjectContext
i Spodziewam się, gdy kontroler dostaje dealloc'ed że wszystkie dane byłyby zbyt, ale pozostaje w pamięci na zawsze.
Linia ta jakoś zachowuje to nie wiem dlaczego: imageView.image = [UIImage imageWithData:image.image];
spędziłem 3 dni na nim próbują wykorzystać wszystko, Instruments
, ponownie sprawdzić, czy nie zachować gdzieś silne odniesienie.
Rzecz jest UIViewController
dostaje dealloc
„ed, że jestem pewien, widzę go w Instruments
z narzędziem Allocation
ale z jakiegoś powodu dane pozostają w pamięci na zawsze, aż do aplikacji ulega awarii.
Oto lista ~ 20 zdjęć w pamięci nie uzyskiwanie dealloc'ed:
A oto szczegóły dla pierwszego obiektu:
Dziękuję za przeczytanie do tego czasu, jestem Naprawdę zdesperowani :(
Czy używasz łuku? – J2theC
Tak, zapomniałem o tym wspomnieć, ale oznaczyłem to, pozwól mi edytować, że – ItsASecret
Czy kontekst obiektu zarządzanego zachowuje się poza kontrolerem widoku? Jeśli tak, to po prostu masz wykres obiektowy z odwołaniami cyklicznymi i wyraźnie nie udaje Ci się [ponownie] uszkodzić twoich obiektów? – Tommy