Erste "freigegeben ist, während der Schlüssel-Wert-Beobachter waren noch registriert." - Fehler nach Umstellung auf ARC
Ich bin mit diesem Klasse:
https://github.com/alexleutgoeb/ALPickerView
Seit ich konvertiert ARC, ich bekomme diese Fehlermeldung nach dem Klick auf den pickerview ein paar mal:
2011-10-18 14:10:19.424 MappingApp[3398:10d03] An instance 0x73c7cd0 of class CustomTapGestureRecognizer was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info: <NSKeyValueObservationInfo 0x5d93430> (<NSKeyValueObservance 0x5d933f0: Observer: 0x5d66eb0, Key path: state, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x746b180>)
Den Fehler Punkte der CustomTapGestureRecoginizer Klasse und die Letzte Zeile dieser Methode:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
//Simple hack, set recognizer state to possible as tap begins
self.state = UIGestureRecognizerStatePossible;
}
In checkview, ich habe diese Methode:
- (void)didMoveToSuperview {
gestureRec = [[CustomTapGestureRecognizer alloc] initWithTarget:nil action:nil];
gestureRec.numberOfTapsRequired = 1;
[gestureRec addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionNew context:nil];
[[self superview] addGestureRecognizer:gestureRec];
}
Und die removeObserver, was ich weiß, kann die Ursache für dieses problem ist in der checkview - dealloc. Sollte ich diese irgendwo anders bewegen? Hat jemand noch andere Ideen, was sein könnte, dieses problem verursacht? Es ist noch nie passiert, ARC.
InformationsquelleAutor Aaron | 2011-10-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vermuten, dass die Methode
didMoveToSuperview
imCheckView
Klasse wird mehr als einmal aufgerufen wodurch diegestureRec
Instanz-variable neu zugewiesen und die bisherigenCustomTapGestureRecognizer
Instanz als keine Referenzen Links durch den BOGEN und dann werden dealloced (wodurch die Warnung, dass noch jemand die Beobachtung der Instanz).Versuchen, hinzufügen
NSLog(@"didMoveToSuperview: self=%@ gestureRec=%@", self, gestureRec);
zu Beginn desdidMoveToSuperview
um zu sehen, ob dies der Fall ist.Wenn also ein quick-fix ist wohl sowas wie das, aber ich habe nicht selber ausprobiert, oder wissen viel über den code.
Schön! win-win als ARC wohl es wurde ein Speicherleck behoben, auch für Sie 🙂
Auch sollte man Gabel und tun pull-request zu beheben, die in der upstream-version, und vielleicht bekommen Sie eine Rückmeldung, wenn es eine gute Lösung.
InformationsquelleAutor Mattias Wadman