Debugger: NSString im Memoy

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Debugger: NSString im Memoy

    Hallo Zusammen,

    ich bin dabei Objective C zu erlernen und wollte mir meine lokalen Variable im Debugger anschauen. Den aktuellen Wert meiner Variable sehe ich, beim Stoppen vom Breakpointer in der Variablensicht, doch der Versuch meine Variable im Speicher wieder zu finden klappt leider nicht. Ganz einfaches Bsp. ich habe eine Variable

    NSString *name = [[NSString alloc] init];
    *name = @"test";

    Nach meinem Verständnis bekomme ich einmal einen Pointer "*name" und einen Speicherplatz mit dem Inhalt "test". Den Pointer habe ich im Speicher gefunden und wenn ich zu seinem Inhalt im Memory View hüpfe finde ich leider nicht den Inhalt "test". Zwar sind da Hex Werte vorhanden, aber diese entsprechen nicht dem ASKII-Code.

    Sicherlich habe ich irgendwo einen Denkfehler..

    Vielen dank für die Antworten vorab.
  • Eigentlich bin ich dabei das Speichermanagment zu erlernen. Hierbei wollte ich die Folgen von retain, copy, release, autorelease mir im Speicher genauer anschauen.

    Frage1:
    retain: Um ein objekt festzuhalten
    copy: Um ein copy zu erzeugen Frage unterschied zu retain, was heißt das im Speicher?
    autorelease: wenn ein Objekt über die Skope Grenzen hinweg gebraucht wird, wird es in ein zwischen Speicher gelegt.


    Frage2:
    Mir ist noch nicht ganz klar, wann ich beim Property erzeugen ein retain und wann ein copy verwende?

    Frage3:
    Habe ich das richtig verstanden:

    Wenn ich mir ein Property erstelle, habe ich die Möglichkeit zu sagen wie ich speichertechnisch damit umgehen möchte. Wenn ich retain angebe:

    @property(retain) NSString *name;

    wird automatische ein Setter Generierung:

    - (void) setName: (NSString*) _name
    {
    if(_name != name)
    {
    [_name retain]; // 1) Erhöht den Retain Cntr von dem Objekt auf was _name zeigt, ----> Hier die Frage warum mache ich das ???
    [name release]; // 2) Der alte Speicherplatz worauf name gezeigt hat ist freigegeben (retain cnt-- )
    name = _name, // 3) name zeigt jetzt auf das neu übergebene Objekt, welches die Adresse im Pointer von _Name ist.
    }
    }

    wenn ich copy verwende:

    @property(copy) NSString *name;


    wird automatische ein Setter Generierung:



    - (void) setName: (NSString*) _name
    {
    if(_name != name)
    {
    [name release]; 1) Der alte Speicherplatz worauf name gezeigt hat ist freigegeben (retain cnt-- )
    name = [_name copy]; 2) Wie sieht das jetzt mit copy aus?
    }
    }

    DAAAANKEEE für die Antworten :)