removeObserver unter ARC
Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen
-
-
Verrätst du uns auch, welche Warning das gibt?
Denn eigentlich ist das der korrekte Weg.«Applejack» "Don't you use your fancy mathematics to muddle the issue!"
Iä-86! Iä-64! Awavauatsh fthagn!
kmr schrieb:
Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
-
Klar.
Method possibly missing a [super dealloc] call -
Ich packe so etwas immer in eine eigene teardown-Methode (mit entspr. setup-Methode). Diese rufe ich an geeigneter Stelle auf. Oftmals ist dealloc dafür garnicht der richtige Platz. Wenn es sich um ein View handelt so in der Art:
Quellcode
- - (void)viewWillMoveToWindow:(NSWindow *)newWindow
- {
- BOOL inWindow = ( [ self window ] != nil );
- BOOL willBeInWindow = ( newWindow != nil );
- if ( willBeInWindow && !inWindow ) {
- [ self setupNotifications ];
- }
- else if ( inWindow && !willBeInWindow ) {
- [ self teardownNotifications ];
- }
- [ super viewWillMoveToWindow:newWindow ];
- }
Unter iOS dann z.B.
bzw. -viewWillAppear/-disappear von UIViewController.
Was für eine Warnung gibt es denn genau? -
HHuckebein schrieb:
Klar.
Method possibly missing a [super dealloc] call
Naja da hat er wohl recht
Lies noch einmal genau und schau noch einmal hin und dann hau dir vor den Kopf
Gruß
Claus2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.
Pre-Kaffee-Posts sind mit Vorsicht zu geniessen -
Meldung siehe oben.
Der Observer ist solange active, wie die App aktiv ist.
Ich nutze einen Observer um Animationen bzw. die Suche nach einer neuen Lokation zu stoppen bzw. zu starten (applicationDidEnterBackground/applicationDidBecomeActive) bzw. um das iAd Banner zu entfernen nach dem Kauf.
Im Moment sehe ich nicht wo ich den TearDown unterbringen sollte wenn nicht in dealloc. -
Nein, hat er nicht.
Thallius schrieb:
Lies noch einmal genau und schau noch einmal hin und dann hau dir vor den Kopf
Jep. Aber nicht so, wie Claus es meint.
Die Meldung besagt, dass ARC entgegen deiner Ursprungsbehauptung eben nicht aktiviert ist.
Denn ARC untersagt explizit das Aufrufen der speichermanagementrelevanten Methoden (wie retain, release, autorelease, dealloc).
Da es dir hier vorgeschlagen wird, kann ARC nicht an sein.«Applejack» "Don't you use your fancy mathematics to muddle the issue!"
Iä-86! Iä-64! Awavauatsh fthagn!
kmr schrieb:
Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
-
Lucas de Vil schrieb:
Nein, hat er nicht.
Thallius schrieb:
Lies noch einmal genau und schau noch einmal hin und dann hau dir vor den Kopf
Jep. Aber nicht so, wie Claus es meint.
Die Meldung besagt, dass ARC entgegen deiner Ursprungsbehauptung eben nicht aktiviert ist.
Denn ARC untersagt explizit das Aufrufen der speichermanagementrelevanten Methoden (wie retain, release, autorelease, dealloc).
Da es dir hier vorgeschlagen wird, kann ARC nicht an sein.
ARC war bei einer Build Configuration off. Keine Ahnung warum.
Jetzt ist alles ok.
Danke. -
Lucas de Vil schrieb:
Nein, hat er nicht.
Wie jetzt ? Selbst bei ARC würde das Verwenden von dealloc ohne ein [super dealloc] ja wohl nicht funktionieren oder schreibt der Compiler das dann auch für einen da rein ?
Gruß
Claus2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.
Pre-Kaffee-Posts sind mit Vorsicht zu geniessen -
Thallius schrieb:
Lucas de Vil schrieb:
Nein, hat er nicht.
Wie jetzt ? Selbst bei ARC würde das Verwenden von dealloc ohne ein [super dealloc] ja wohl nicht funktionieren oder schreibt der Compiler das dann auch für einen da rein ?
Gruß
Claus
[super dealloc] unter ARC ist ja nicht erlaubt und ja ich denke da gibt es einen wie auch immer gearteten Automatismus. -
Thallius schrieb:
Lucas de Vil schrieb:
Nein, hat er nicht.
Wie jetzt ? Selbst bei ARC würde das Verwenden von dealloc ohne ein [super dealloc] ja wohl nicht funktionieren oder schreibt der Compiler das dann auch für einen da rein ?
Gruß
Claus
Das Laufzeitsystem macht das automatisch. (Ich finde es übrigens ugly, aber mich fragt ja keiner.)
Bedenke, dass in einer Instanz sich alle IVars in einer Liste, nicht einer hierarchischen Struktur befinden (auch wenn sie aus mehreren Klassenebenen stammen) und daher mit einer Schleife abgehandelt werden können.Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"? -
Thallius schrieb:
Lucas de Vil schrieb:
Nein, hat er nicht.
Wie jetzt ? Selbst bei ARC würde das Verwenden von dealloc ohne ein [super dealloc] ja wohl nicht funktionieren oder schreibt der Compiler das dann auch für einen da rein ?
Eyup. Das meinte Amin andererorts mutmaßlich mit 'dealloc verkommt zu einem finalizer'.«Applejack» "Don't you use your fancy mathematics to muddle the issue!"
Iä-86! Iä-64! Awavauatsh fthagn!
kmr schrieb:
Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
-
Lucas de Vil schrieb:
Thallius schrieb:
Lucas de Vil schrieb:
Nein, hat er nicht.
Wie jetzt ? Selbst bei ARC würde das Verwenden von dealloc ohne ein [super dealloc] ja wohl nicht funktionieren oder schreibt der Compiler das dann auch für einen da rein ?
Eyup. Das meinte Amin andererorts mutmaßlich mit 'dealloc verkommt zu einem finalizer'.
Womit dann auch klar wäre, dass Markus' Idee nicht komplett verkehrt ist.Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
-
Tags