Unklarheiten bei autorelease ???

  • RE: Unklarheiten bei autorelease ???

    Original von Tom9811
    ... Aber da muss ich auch nur dann machen:

    Quellcode

    1. [object setString:[temp copy]]
    2. // weitere Änderungen




    Ups, da geht wohl was in die Hose. Böses Memmoryleak. Und das von Dir.... ;-)
    Sieht besser so aus:

    Quellcode

    1. id copy = [temp copy];
    2. [object setString: copy];
    3. [copy release];
    4. // weitere Änderungen


    t.
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • RE: Unklarheiten bei autorelease ???

    Jo, da hast du Recht *schäm*

    Aber ich tendiere dann dooch zu

    Quellcode

    1. [object setString:[[temp copy] autorelease]];
    ;

    Wir wollen doch keinen abscheulichen C++-MS-Code fabrizieren.
    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"?
  • Wie schon gesagt: Dein Naming könnte deutlicher sein.

    Ansonsten sieht es ganz gut aus. mach es halt nochmal mit einem Nicht-Konstant-Object.

    Darf ich dem entnehmen, dass die Arbeiit am Artikel nicht ganz umsonst war?
    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
    Wenn du das drauf hast und Cocoa Bindings, schreibst du ja auch schon super-Software.

    Ja, das sehe ich jeden Tag auf Versiontracker, wie viele Bugfix betas täglich rauskommen. Und ich könnte wetten, dass der Großteil derer auch diese Konzepte verstanden hat. Wie war das mit der Theorie und der Praxis??
  • Und ich verwette ein Vermögen, dass sie es nicht verstanden haben. Dann bräuchten sie nämlich keine Bugfixes.

    Aber ich gebe dir schon Recht: Die meisten Bugs sind Pointer und Array Probleme. Und in C hat man ja keine andere Wahl, als sich das anzutun.

    BTW: Es wird viel zu wenig mit Bindings geschrieben, Du siehst ja hier, wie die Leute mit vorsichtigen Händen herangehen. Und ehrlich gesagt: Die Tuts von Apple sind dazu bescheiden. Sie taugen etwas, wenn man es schon verstanden hat.
    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"?
  • RE: Unklarheiten bei autorelease ???

    Original von Tom9811
    Doch, ich halte das für bereits dort fehlerhaft.

    Wenn ich einen Pointer weitergebe, kann damit alles passieren Darüber muss ich mir klar sein. Auch schon in C.

    Logisch. Aber wenn ich eine Klasse entwerfe, wo der Inhalt eines Strings gekapselt sein soll und nicht nur der Pointer, dann sehe ich da eben keinen Fehler darin, die Benutzung der Klasse so einfach wie möglich zu gestalten. So etwas findet man ja auch in Cocoa.

    Original von Tom9811
    Wenn ich einen Pointer weitergebe und weiterhin mit dem Object arbeiten möchte, so kann ich das ja selbst sehen und übergebe dann eben eine Kopie.

    Ich finde, das ist eine Frage des Komforts. Wenn es für eine Eigenschaft einer Klasse überhaupt keinen Sinn hat, nur eine Referenz zu halten, dann lasse ich das gar nicht erst zu.

    Original von Tom9811
    In den Apple-Sourcen findet man zuweilen release+copy, was übelst ins Auge gehen kann.

    Echt? Autsch.

    Original von Tom9811
    Also, ich halte meine Lösung für besser gekapselt. Vor allem: Ich gewinne dadurch ja noch Speicher und Geschwindigkeit.

    Ich halte für Value-Objekte meine Lösung für besser gekapselt und vor allem komfortabler. :D Vom Speicher und Geschwindigkeit nimmt sich das auch nicht viel, wenn man die gleiche Funktionalität haben will. Wenn ich es genau überlege, dürfte bei identischer Funktionalität, meine Lösung sogar etwas schneller sein, weil ich nur zwei (autorelease und copy im Setter) statt vier (copy und autorelease vor Parameterübergabe, retain und release im Setter) Messages benötige. ;)

    Original von Tom9811
    BTW: Ich möchte mich bei dir für die Diskussion herzlich bedanken. Mir sind wieder neue Aspekte besser klar geworden. Das ist das schöne an einem Forum.

    Bitte, gern geschehen.

    Michael
  • RE: Unklarheiten bei autorelease ???

    Ich weiß immer noch nicht, was du mit Inhalt meinst. Inhalt kann eine Referenz sein oder dass referenzierte Objekt. Im einen Fall muss ich retainen, im anderen eine Kopie anlegen. Der erste Fall erscheint mir in oC natürlicher.

    Wenn eine Referenz für ein Klasse überhaupt keinen Sinn macht, eine Referenzz zu halten, dann muss man keine Referenz machen. Das ist eine Tautologie. Allerdings tendiere ich eher zur Referenz, weil eben oC darauf aufbaut und es Speicher und Zeit spart.

    Du meinst jetzzt aber nicht, dass die Anzahl der Nachrichten etwas über die Geschwindigkeit aussagt!? ;)
    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"?
  • RE: Unklarheiten bei autorelease ???

    Original von Tom9811
    Ich weiß immer noch nicht, was du mit Inhalt meinst. Inhalt kann eine Referenz sein oder dass referenzierte Objekt.

    Ich meine das referenzierte Objekt oder plump ausgedrückt die Zeichen in dem String.

    Original von Tom9811
    Im einen Fall muss ich retainen, im anderen eine Kopie anlegen. Der erste Fall erscheint mir in oC natürlicher.

    Wenn eine Referenz für ein Klasse überhaupt keinen Sinn macht, eine Referenzz zu halten, dann muss man keine Referenz machen. Das ist eine Tautologie. Allerdings tendiere ich eher zur Referenz, weil eben oC darauf aufbaut und es Speicher und Zeit spart.

    Ich gucke einfach nach dem konkreten Anwendungsfall.

    Original von Tom9811
    Du meinst jetzzt aber nicht, dass die Anzahl der Nachrichten etwas über die Geschwindigkeit aussagt!? ;)

    Nur, wenn der entsprechende Code extrem oft durchlaufen wird. Ansonsten merkt man davon bei den heutigen Rechnern natürlich nichts. Ich wollte nur ausdrücken, dass es zwischen unseren beiden Lösungen eben keinerlei Zeit- oder Speicherunterschied gibt, wenn beide Wege ein identisches Ergebnis liefern sollen.

    Michael