Freigabe von Propertyobjekten
- 
			
- 
			es geht NUR mit self.objekt = nil bzw [self setObjekt:nil];
- 
			kannst du mir das vielleicht noch bisschen erläutern wieso. Wäre echt ne Sache aber trotzdem schonmal danke  
- 
			OS X NoobCoder schrieb:kannst du mir das vielleicht noch bisschen erläutern wieso. Wäre echt ne Sache aber trotzdem schonmal danke  
 Wenn Du es über die erste Variante freigibst, erzeugst Du einen Dangling Pointer. Wenn es sich um eine Property vom Typ strong, retain oder copy handelt, bekommt das Objekt hinter dem Pointer bei einer Zuweisung noch ein Release geschickt und das geht früher oder später in die Hose.„Meine Komplikation hatte eine Komplikation.“
- 
			Nur kurz was ist ein Dangling Pointer und das heisst wenn ich ein property mit retain erstelle dann geben ich es immer mit self dem Namen des Objekts und = Nil wieder frei hab ich richtig verstanden ?Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von OS X NoobCoder () 
- 
			OS X NoobCoder schrieb:Nur kurz was ist ein Dangling Pointer und das heisst wenn ich ein property mit retain erstelle dann geben ich es immer mit self dem Namen des Objekts und = Nil wieder frei hab ich richtig verstanden ?
 Nein, nicht immer. Insbesondere gibt es eine nicht unbedeutende Zahl an Menschen, die im -dealloc ein [iVarOfObject release] sehen wollen. Außerdem steht das natürlich so im Setter (den du allerdings mutmaßlich synthetisiert hast.)
 
 Eine Alternative:
 Objective-C Automatic Reference Counting: YES
 
 Ein Dangling-Pointer ist eine Objektreferenz (in diesem Falle), die auf etwas zeigt, wo kein Objekt mehr 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"?
- 
			Was heisst das dann genau wie gebe ich die Objekte dann frei? Oder gibt's da ne Regel an die ich mich halten kann oder ähnliches?
- 
			OS X NoobCoder schrieb:Was heisst das dann genau wie gebe ich die Objekte dann frei? Oder gibt's da ne Regel an die ich mich halten kann oder ähnliches?
 Zahlreiche, die in Büchern und Apple-Tutorials erläutert werden.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"?
- 
			Kannst du mir ne Seite zum Nachlesen empfehlen weil in meinem buch steht davon leider gar sondern nur allgemein zum Speichermanagement
- 
			OS X NoobCoder schrieb:Kannst du mir ne Seite zum Nachlesen empfehlen weil in meinem buch steht davon leider gar sondern nur allgemein zum Speichermanagement
 Welches Buch?
 
 Ansonsten einfach nach "Memory Management" suchen.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"?
- 
			Ich hab das iPhone-Apps entwickeln von Dr. dirk Koller
- 
			
- 
			gritsch schrieb:es geht NUR mit self.objekt = nil bzw [self setObjekt:nil];
 Das verstehe ich nicht so ganz. Ich habe bisher Properties (wie auch andere Objekte) mit
 
 
 frei gegeben (bzw. mit [self object] für Properties). Das Setzen des Pointers auf nil mache ich eigentlich nur, um bei irrtümlichen Senden von Nachrichten an das Objekt keine Exceptions zu bekommen. Idealerweise sollte dies nur für den Release-Build erfolgen, damit ich vorher deratige Patzer finde, aber dafür habe ich noch keine vernünftige Idee. Wenn ich mir jetzt den entsprechenden Setter vorstelle, sähe der etwas so aus:
 
 
 Dann entspricht ein [self setObject:nil] aber doch genau meinem Code ... Habe ich was übersehen oder Dich falsch verstanden?
 
 MattesDiese Seite bleibt aus technischen Gründen unbedruckt.
- 
			klar, im dealloc kannst du auch die ivar verwenden (falls vorhanden, da synthetisiert).
 
 ich meinte mit meiner aussage eben dass er den rückgabewert eines getters nicht releasen soll/darf!
 
 >Das Setzen des Pointers auf nil mache ich eigentlich nur, um bei irrtümlichen Senden von Nachrichten an das Objekt keine Exceptions zu bekommen.
 
 ???
- 
			gritsch schrieb:>Das Setzen des Pointers auf nil mache ich eigentlich nur, um bei irrtümlichen Senden von Nachrichten an das Objekt keine Exceptions zu bekommen.
 
 ???
 Früher habe ich nur released. Wenn ich dann aus Schusseligkeit dem Objekt später noch eine Nachricht geschickt hätte, gäb es aufgrund des dangling pointers eine Exception. Ist der Pointer nil, passiert dies nicht, da man ruhig Nachrichten an nil schicken darf. Während der Entwicklungsphase ist mir die Exception willkommen, um einen derartigen Fehler zu finden, aber im späteren Release im Sinne einer robusten Anwendung nicht. Besser ist natürlich, diesen Fall gar nicht erst auftreten zu lassen ...  
 
 MattesDiese Seite bleibt aus technischen Gründen unbedruckt.
- 
			So hab jetzt nochmal nachgelesen hier steht:
 
 Eigene Objekte müssen mit release oder autorelease freigegeben werden
 
 Definition von eigenen Objekten:
 
 Die (Speicher-) Verantwortung für ein Objekt wurde durch Senden der retain-Nachricht übernommen.
 
 das heisst dann für mich, dass alle Properties welche mit @property (nonatomic, retain) erstellt werden,
 hit release freigegeben warden müssen.
 
 Is das so richtig
- 
			MyMattes schrieb:gritsch schrieb:>Das Setzen des Pointers auf nil mache ich eigentlich nur, um bei irrtümlichen Senden von Nachrichten an das Objekt keine Exceptions zu bekommen.
 
 ???
 Früher habe ich nur released. Wenn ich dann aus Schusseligkeit dem Objekt später noch eine Nachricht geschickt hätte, gäb es aufgrund des dangling pointers eine Exception. Ist der Pointer nil, passiert dies nicht, da man ruhig Nachrichten an nil schicken darf. Während der Entwicklungsphase ist mir die Exception willkommen, um einen derartigen Fehler zu finden, aber im späteren Release im Sinne einer robusten Anwendung nicht. Besser ist natürlich, diesen Fall gar nicht erst auftreten zu lassen ...  
 
 Mattes
 
 ah verdammt, ich hab das "keine" überlesen in der hektik (deshalb auch kein ordentlicher quote)
- 
			OS X NoobCoder schrieb:So hab jetzt nochmal nachgelesen hier steht:
 
 Eigene Objekte müssen mit release oder autorelease freigegeben werden
 
 Definition von eigenen Objekten:
 
 Die (Speicher-) Verantwortung für ein Objekt wurde durch Senden der retain-Nachricht übernommen.
 
 das heisst dann für mich, dass alle Properties welche mit @property (nonatomic, retain) erstellt werden,
 hit release freigegeben warden müssen.
 
 Is das so richtig
 
 NEIN! entweder im dealloc (und NUR dort) ein release auf die iva (nicht auf das resultat des getters) oder einfach mittels setter nil setzen (egal von wo)
- 
			Also is das müll was in dem Buch steht?
- 
			Woher sollen wir wissen was in dem Buch steht?

