Frage zu Feinheiten

  • Ein [super dealloc] fürht dazu, dass die -dealloc-Methode von super ausgeführt wird. Es ist überhaupt nicht die Aufgabe von -dealloc ($NSIrgendwas), die Instanz selbst zu entfernen. -dealloc wird ausgeführt, wenn bereits feststeht, dass die Instanz beseitigt wird. Sie ist ein Teil der Beseitigung und verursacht diese nicht. Daher erzeugst du so garantiert ein Memoryleak – jedenfalls gibt die Doku nichts anderes her. Die Speicherverwaltung ist gekapselt und daher mit ihrer API hinzunehmen.

    Zudem kannst du ein Memoryleak erzeugen, weil du dich möglicherweise selbst schon teilweise initialisiert hast. -dealloc (super) würde etwaig bereits bestehende Instanzen von dir selbst nicht beseitigen.

    Daher – und dies war der Klammerzusatz – musst du dich selbst erst einmal dealloc-fähig machen. Du kannst dich dabei zum Teil auf die Garantie verlassen, dass alle Instanzvariablen 0, NULL bzw. nil sind. Das dürfte in vielen Fällen ausreichen. In allen anderen Fällen musst du eben dafür sorgen.

    Aber auch hier gilt: Du hast die Grundkonzepte der Speicherverwaltung nicht verstanden und kümmerst dich um Spezialeffekte. Das ist nicht sinnvoll.

    Es wird übrigens auch bei deinem nächsten Thread nicht sinnvoll sein.
    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"?
  • Original von Tom9811
    Aber auch hier gilt: Du hast die Grundkonzepte der Speicherverwaltung nicht verstanden und kümmerst dich um Spezialeffekte. Das ist nicht sinnvoll.

    Also, diese gebetsmühlenartige Wiederholung dieses Vorwurfs an jemanden, der sich gerade um das Verstehen bemüht, halte ich für sehr kontraproduktiv - mehr sage ich nicht dazu.

    Im übrigen kann man bei S.G.Kochan in "Programming in Objective-C" auf Seite 343 nachlesen:

    ".... The dealloc method is called whenever the memory used by an object is to be returned to the system, or deallocated. The release method does not necessarily deallocate the memory used by an object, whereas dealloc does. ..."
    Dem 10x8-Schach gehört die Zukunft !
  • Original von Scharnagl
    Original von Tom9811
    Aber auch hier gilt: Du hast die Grundkonzepte der Speicherverwaltung nicht verstanden und kümmerst dich um Spezialeffekte. Das ist nicht sinnvoll.

    Also, diese gebetsmühlenartige Wiederholung dieses Vorwurfs an jemanden, der sich gerade um das Verstehen bemüht, halte ich für sehr kontraproduktiv - mehr sage ich nicht dazu.

    Nein, es ist kontraproduktiv, Grundkonzepte nicht zu verstehen und dann einen Versuch zu starten, über weiterführende Probleme zu diskutieren. Der Rat, dies nicht zu tun, ist produktiv.

    Original von ScharnaglIm übrigen kann man bei S.G.Kochan in "Programming in Objective-C" auf Seite 343 nachlesen:
    ".... The dealloc method is called whenever the memory used by an object is to be returned to the system, or deallocated. The release method does not necessarily deallocate the memory used by an object, whereas dealloc does. ..."

    Ja, das ist auch richtig, was da steht. Das hatte ich auch gesagt.

    Wenn du das als Gegenargument verstehen solltest, dann hast du es immer noch nicht verstanden.
    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"?
  • Original von Tom9811
    ja, so etwas in der Art. Aber beachte, dass das hier kein If auf das super ist, sondern ein eigenes.

    Quellcode

    1. if (FILE_NOT_EXISTS || FILE_NOT_AN_IMAGE)
    2. {
    3. [self release];
    4. return nil;
    5. }
    Davon sprach Scharnagl nicht.

    Das wird relevant wenn er diese Klasse ableitet und den -initByReferencingFile überschreibt. Also self=[super initByReferencingFile:path] aufruft. Das kann dann folglich nil zurückliefern und dann geht der Zugriff auf Instanzvariablen schief.

    Insgesamt ist es "good practice" self auf nil abzufragen um eventuellen Problemen aus dem Weg zu gehen. Absolut notwendig ist es nicht wenn man exak weiss was in allen Superklassen passiert und diese auch nicht irgendwann mal verändert werden.

    -- hns
  • Original von Scharnagl
    Im übrigen kann man bei S.G.Kochan in "Programming in Objective-C" auf Seite 343 nachlesen:

    ".... The dealloc method is called whenever the memory used by an object is to be returned to the system, or deallocated. The release method does not necessarily deallocate the memory used by an object, whereas dealloc does. ..."

    Vielleicht überzeugt Dich Apples Dokumentation zu dealloc:

    You never send a dealloc message directly. Instead, an object’s dealloc method is invoked indirectly through the release NSObject protocol method (if the release message results in the receiver's retain count becoming 0). See Memory Management Programming Guide for Cocoa for more details on the use of these methods.

    Das erklärt auch Dein Zitat aus "Programming in Objective-C" genauer.

    Michael
  • Original von Tom9811
    Nein, es ist kontraproduktiv, Grundkonzepte nicht zu verstehen und dann einen Versuch zu starten, über weiterführende Probleme zu diskutieren. Der Rat, dies nicht zu tun, ist produktiv.

    Gerade weil ab der Seiten 320 zum Thema init grundlegende Codierungsmuster präsentiert werden, sollten diese verstanden sein. Da dies (zumindest mir) nicht auf Anhieb gelingen will, stellt sich eben die Frage, woran das liegt. Ich könnte es mir leicht machen, das teure Buch als evtl. didaktisch unzureichend wegwerfen, an einem evtl. zu kleinen eigenen Verstand verzweifeln, oder aber versuchen, die Dinge zu klären. Hierzu lese ich auch andere Quellen und bringe meine Fragen ins Forum. Ich dachte, dessen Titel: "Fragen zum Buch" würde es gerade zu einer Plattform für Personen machen, die eben noch nicht alles verstanden haben.

    Und hier stelle ich eben fest, dass zum einen das mit dem static BOOL Unfug ist, und zum anderen ein Hinweis darauf fehlt, bei einem gescheiterten init nicht nur nil zu retournieren, sondern auch die Superklasse zu deallozieren. Es macht m.E. wenig Sinn, sich nur mit dem Abfangen eines retournierten nil zu beschäftigen, aber auf eine korrekte Behandlung eines möglichen Versagens eines init nicht näher einzugehen. Das Echo Dritter auf meine Fragen hier scheint mir darin zudem doch ein wenig Recht zu geben.

    Dass ich solche Probleme erkenne, halte ich eher für einen erkennbaren Fortschritt bei dem Versuch, die Grundkonzepte der Speicherverwaltung zu verstehen, als dass man das als ein Nebenthema vermeintlicher Spezialeffekte abtut.
    Dem 10x8-Schach gehört die Zukunft !
  • Du hast offenkundig den Kochan nicht verstanden und dich von ihm verwirren lassen. Du hast den Kochan im Kontext fehlerhaft zitiert.

    Dafür kann möglicherweise Kochan etwas. Ich vermute aber die Ursache eher bei dir.

    Übrigens haben zahlreiche Menschen das sehr gut verstanden, gerade dieses Kapitel. Deine seltsamen Ansichten hat wirklich noch nie irgendwer geäußert.

    Es spricht vieles dafür, dass es an dir liegt.

    Was deine Meinung nach wenig Sinn macht, ist nicht relevant. Du hast die Grundkonzepte nicht verstanden.
    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"?
  • Original von Michael
    Vielleicht überzeugt Dich Apples Dokumentation zu dealloc:

    You never send a dealloc message directly. Instead, an object’s dealloc method is invoked indirectly through the release NSObject protocol method (if the release message results in the receiver's retain count becoming 0). See Memory Management Programming Guide for Cocoa for more details on the use of these methods.

    Das erklärt auch Dein Zitat aus "Programming in Objective-C" genauer.

    Nun, für vollständig instanzierte Objekte sehe ich das genauso. Nur hier würde ein release doch letztlich ein dealloc auf Subklassenebene auslösen, wo die Instanz aber nicht instanziert wäre. Und - so hatte ich es verstanden - dies zu vermeiden, ist doch ein Teil des Problems im Umgang mit nicht vollständig instanzierten Objekten.
    Dem 10x8-Schach gehört die Zukunft !
  • Die Apple-Doku schreibt nichts von vollständig initialisiert oder nicht.

    Du verstehst einfachste Dinge nicht, liest Zitate nicht richtig und bist jetzt auch noch schlauer als Apple.

    Das ist mal geil!
    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"?
  • Original von Tom9811
    Die Apple-Doku schreibt nichts von vollständig initialisiert oder nicht.

    Du verstehst einfachste Dinge nicht, liest Zitate nicht richtig und bist jetzt auch noch schlauer als Apple.

    Das ist mal geil!

    Na ja, Polemik statt Fakten! Ich zweifle, dass sich das gesamte Wissen von Apple in diesen Zeilen kondensiert hat. Da wird es sicher noch einige potente Köpfe geben ...
    Dem 10x8-Schach gehört die Zukunft !
  • Original von Scharnagl
    Original von Tom9811
    Die Apple-Doku schreibt nichts von vollständig initialisiert oder nicht.

    Du verstehst einfachste Dinge nicht, liest Zitate nicht richtig und bist jetzt auch noch schlauer als Apple.

    Das ist mal geil!

    Na ja, Polemik statt Fakten! Ich zweifle, dass sich das gesamte Wissen von Apple in diesen Zeilen kondensiert hat. Da wird es sicher noch einige potente Köpfe geben ...

    Polemisch bist doch du. Liest den Kochan, bist intellektuell nicht in der Lage, das Zitat zu verstehen und stellst die Frage, ob ich da didaktische Lücken habe. Das ist wirklich eine Art der Verblendung und Selbstüberschätzung, die man allerseltenst trifft.

    Sieh es ein: Du warst bei mir zu untalentiert es zu verstehen, du warst es beim Kochen. Du wirst noch einige Bücher finden, die du nicht verstehst. Da bin ich mir ganz sicher.

    EINER???? TAUSENDE!!!!!!!
    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"?
  • Original von Tom9811
    Polemisch bist doch du. Liest den Kochan, bist intellektuell nicht in der Lage, das Zitat zu verstehen und stellst die Frage, ob ich da didaktische Lücken habe. Das ist wirklich eine Art der Verblendung und Selbstüberschätzung, die man allerseltenst trifft.

    Also bevor jetzt hier ein Atomkrieg ausbricht: wie könnte man denn diese Fragestellung in ein verifizerbares Beispiel umformen?
    Dem 10x8-Schach gehört die Zukunft !
  • Das man -dealloc nicht aufruft? Durch Lesen

    a) von Rodewig/Negm-Awad, Objective-C und Cocoa
    b) von Kochan, Programming in Objective-C
    c) der Apple-Dokumentation
    d) der Beiträge hier.

    Sagt mal, merkst du überhaupt noch etwas?
    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"?
  • Original von Tom9811
    Sagt mal, merkst du überhaupt noch etwas?

    Ich bemerke den Stil: tu genau dies, tu genau das, frage aber nicht warum, lese erst noch ein paar hundert weitere Seiten, ab Seite 1000 wirst du dann verstehen ...

    Übrigens - die Seite 1000 existiert hier nicht. Und ich möchte tatsächlich etwas verstehen lernen, nicht aber dressiert werden. Und dieses zu versuchen, überfordert meine Person nicht.

    Und natürlich verwendet man -dealloc, und zwar dort, wo es Sinn macht, und dann in der Regel adressiert an super.
    Dem 10x8-Schach gehört die Zukunft !
  • Das ist erneut falsch.

    ich sage: Sei nicht schlau dies, sei nicht schlau das, wenn du nicht einmal die Grundkonzepte verstanden hast.

    Um es einfach zu machen, leider muss ich es so sagen: Du bist offensichtlich gänzlich für OOP untalentiert. Du siehst das auch nicht ein und versuchst auch nicht, durch Fleiß das auszugleichen. Und ja: Das ist nicht nur kontraproduktiv, sondern wirklich schmerzhaft. Dir kann man nicht helfen.

    Stattdessen schreibst du oberschlaue Beiträge, die bar jeder Vernunft sind. Du kannst dir leicht vorstellen, wie anstrengend derartige Ignoranz ist.

    Aber gut. Du wirst Objective-C und Cocoa revolutionieren. Zwar offensichtlich mit hartnäckiger Leseschwäche, aber revolutionieren. Es verhält sich nämlich so, dass Kochan, ich, Klaus, Michael, Apple, Gritsch, alle zusammen völlige Idioten sind. Nur du, du weißt es.

    Aber du scheinst ja generell eher neuen zugeneigt, anstelle Bestehendes verstehen zu wollen. Das ist der Qualität des Neuen in aller Regel abträglich.
    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"?
  • Original von Tom9811
    ... Du bist offensichtlich gänzlich für OOP untalentiert. ...

    Du hast nicht die geringste Ahnung von meiner Person. Hier unfähig, deine Ansichten außer durch Glaubensbekenntnisse zu begründen, lavierst du bei konkreten Nachfragen und diffamierst lieber den Fragesteller, statt auf das Problem sachlich einzugehen. Es ist mir schnuppe, wie viele "Du sollst (nicht) ..." Gebote aus den "heiligen" Schriften zitiert werden, solange keine wirklichen Begründungen dafür mitgeliefert sind. Ich behaupte nicht, dass ich mit meiner Ansicht recht habe, nur, sie erscheint mir zur Zeit am sinnvollsten. Solange ich nichts Überzeugenderes finde, argumentiere ich für sie, bzw. deren Abklärung.
    Dem 10x8-Schach gehört die Zukunft !