super dealloc nicht mehr nötig?

  • super dealloc nicht mehr nötig?

    Ich arbeite gerade etliche Tutorials zu Xcode durch. Diese beziehen sich ausnahmslos auf Xcode 3.x. Ich arbeite aber von vornherein mit Xcode 4 um später nicht vor Umstellungsprobleme gestellt zu werden und passe die Arbeitsweise (besonders beim IB mit seinem neuen Aufbau, dem Actions,outlets Zuweisungen etc.) entsprechend an. Nun gibt es sehr oft den Hinweis, man sollte immer nach dem init-Block auch einen (void)dealloc{} Block einfügen um dort das super dealloc durchzuführen und nötiges zu releasen. Nun mault Xcode4 schon bei der Eingabe mir der Meldung "release is unavaiable: not avaiable in autmatic reference counting mode" bzw. "ARC forbids explicit message send of "dealloc"

    Heißt dass, dass beo Xcode4 nun dieser dealloc zum Ende hin komplett weggelassen werden kann, weil das System selbst dafür sorgt?
  • Ganz simpel im Moment so:

    - (void)dealloc {
    [mymodel release];
    [super dealloc];
    }


    oder auch bei Konstrukten wie (Auschnitt aus dem Codeblock):

    ...{...
    NSNumber* shownValue = [[NSNumber alloc] initWithDouble:readvalue];
    [mymodel setNumber:shownValue];
    [shownvalue release];
    ...}


    Das Projekt ist im Prinzip durchgearbeitet, also das Tutorial meine ich. Und alles ist final und so wie es laut Tut sein soll. Xcode meckert auch nur mit gelben Ausrufezeichen bei den deallocs herum und überall dort, wo ich in diesem Falle NSNumber-Objekte wieder release. Für mich stellt es sich so dar, als wenn Xcode4 hier igrnedwie eine eigene Aufräumaktion starten will und sich durch dieses dealloc gestört fühlt oder es für überflüssig befindet.
  • Danke, das spart Arbeit, auch wenn es auf der anderen Seite natürlich die Faulheit pflegt und so im programmiertechnischen und maschinennahen Sinne ein wenig Einfachheit vorgaukelt... :)
    Errrm... super dealloc ist auch obsolet?

    Wie macht es Xcode denn intern? Mit einer Art Zähler, der einfach solange automatisch released bis er wieder auf 0 steht?!??! Ist das nicht schon eine Art automatischer GarbageCollection oder so? Der Begriff ist mir noch aus uralten Zeiten im Gedächtnis, als es sowas nur in der Theorie oder überaus simpel in einem guten alten Brotkasten gab :) Warscheinlich liege ich falsch, aber ich schieße mal ins Blaue mit meienr Vermutung.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Labecula ()

  • gritsch schrieb:

    [mymodel setNumber:[NSNumber numberWithDouble:readvalue]];
    Ja, mir ist klar das man das direkter machen kann. Es ist aber ein Tut, bei dem ich mich erstmal an die Vorgabe halte. Aber trotzdem danke für den Hinweis! :) Moment: An dem Alloc komme ich doch nicht vorbei, oder? Oder ist das nun auch nicht mehr nötig... Wäre komisch...
  • Labecula schrieb:

    gritsch schrieb:

    [mymodel setNumber:[NSNumber numberWithDouble:readvalue]];
    Ja, mir ist klar das man das direkter machen kann. Es ist aber ein Tut, bei dem ich mich erstmal an die Vorgabe halte. Aber trotzdem danke für den Hinweis! :) Moment: An dem Alloc komme ich doch nicht vorbei, oder? Oder ist das nun auch nicht mehr nötig... Wäre komisch...


    das alloc-init-autorelease passiert doch in der numberWith...
    oder gibts das autorelease bei ARC auch nicht. hab mich noch nicht damit beschäftigt weil ich noch mit GCC 4.0 arbeiten muss wegen Mac OS X 10.4...
  • gritsch schrieb:

    Labecula schrieb:

    gritsch schrieb:

    [mymodel setNumber:[NSNumber numberWithDouble:readvalue]];
    Ja, mir ist klar das man das direkter machen kann. Es ist aber ein Tut, bei dem ich mich erstmal an die Vorgabe halte. Aber trotzdem danke für den Hinweis! :) Moment: An dem Alloc komme ich doch nicht vorbei, oder? Oder ist das nun auch nicht mehr nötig... Wäre komisch...


    das alloc-init-autorelease passiert doch in der numberWith...
    oder gibts das autorelease bei ARC auch nicht. hab mich noch nicht damit beschäftigt weil ich noch mit GCC 4.0 arbeiten muss wegen Mac OS X 10.4...
    Schön das sich alle so einig sind ;) nunja, die Codebeispiele sind aus einem Tut mit Xcode 3.1 glaube ich. Auf jeden Fall vor dem 3.2 wo es u.a. Änderungen im IB gab. Nach Entfernen der bemängelten Abschnitte ging der build auch glatt durch. Aber diese Alloc-Geschichte würde mich schon interessieren. Es würde ja insgesamt das coden schon ein wenig beschleunigen wenn auch dies unnötig ist.
  • Labecula schrieb:

    gritsch schrieb:

    Labecula schrieb:

    gritsch schrieb:

    [mymodel setNumber:[NSNumber numberWithDouble:readvalue]];
    Ja, mir ist klar das man das direkter machen kann. Es ist aber ein Tut, bei dem ich mich erstmal an die Vorgabe halte. Aber trotzdem danke für den Hinweis! :) Moment: An dem Alloc komme ich doch nicht vorbei, oder? Oder ist das nun auch nicht mehr nötig... Wäre komisch...


    das alloc-init-autorelease passiert doch in der numberWith...
    oder gibts das autorelease bei ARC auch nicht. hab mich noch nicht damit beschäftigt weil ich noch mit GCC 4.0 arbeiten muss wegen Mac OS X 10.4...
    Schön das sich alle so einig sind ;) nunja, die Codebeispiele sind aus einem Tut mit Xcode 3.1 glaube ich. Auf jeden Fall vor dem 3.2 wo es u.a. Änderungen im IB gab. Nach Entfernen der bemängelten Abschnitte ging der build auch glatt durch. Aber diese Alloc-Geschichte würde mich schon interessieren. Es würde ja insgesamt das coden schon ein wenig beschleunigen wenn auch dies unnötig ist.


    ja dann lies dich doch ein. sollte in der compiler-beschreibung zu finden sein wenns in apples doku nicht ist.
  • Danke für den Hinweis/Link. Ich würde mich gern in alles einlesen. Aber wenn man dabei ist objective-c zu lernen, ist man über jegliche schnelle Hilfe dankbar die man bekommt. Der Kopf raucht nämlich so schon genug ;-))

    @gritsch: Das war keine Kritik! Du hast den Smiley gesehen?

    P.S. Schön hier mal einen Autor eines meiner Hilfsmittel zu sehen!
  • @gritsch: Sicherlich weiß ich, für welche Plattform ich letztlich programmieren will. Das Problem ist nur, dass Beispiele und Literatur hier wenig Rücksicht drauf nehmen, zumindest wenn man darauf achten muss alles sehr verständlich serviert zu bekommen. Daher wechsel ich derzeit sowohl zwischen OS X >= 10.5- als auch iOS4-Tutorials. Das ist zwar nicht optimal, jedoch für meine Lernkurve unterm Strich doch besser für mich.

    Bisher habt ihr mir doch auch super geholfen. Ich muss, warscheinlich wie fast jeder Newbie, aber erst einmal meinen Weg finden. Das ist halt holprig und nicht ganz ohne Hürden. Besonders wenn man vor weit über 20 Jahren nicht mehr als mal ein GFA Basic gesehen hatte und jetzt langsam die 40 Jahre ankratzt... Da rostet es schon im Vorfeld ganz schön. Ich werde schon mein Ziel finden ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Labecula ()

  • So, Problem mit dem nicht funktionierenden Release und dealloc gelöst. Ich habe in Xcode den LVMM 3 Compiler genutzt und irgendwo in den Settings versteckt wohl, wie auch immer, ARC aktiviert gehabt. Das bedingt zwar, dass man sich auf der einen Seite die Freigabe sparen kann aber auf der anderen Seite selbige auch nicht manuell im Quelltext einfügen darf. Das ich aber lieber alles selbst unetr Kontrolle habe und Automatismen solcher Art eher misstraue, bleibe ich bei der alten Weise. ARC ist natürlich verlockend. Aber wenn mal weas in die Grütze geht, wer sagt mir, dass ich dann den Fehler direkt finde? Denke das muss noch reifen um perse einegsetzt werden zu können.