Memory Leak NSDictionary

  • klawitter schrieb:

    gritsch schrieb:

    du machst bisher autorelease UND release. eins von beiden reicht aber!

    wenn du das aber nicht weist/verstehst dann solltest du wirklich was einführendes lesen
    Das ist im Code in der Tat doppelt, der Code läuft aber nur, wenn ich beides weglasse. Wenn ich Autorelease ODER release ausführe, gibt es einen Crash.


    im eingangsthread sagst du aber ganz was anderes!?
  • gritsch schrieb:

    klawitter schrieb:

    gritsch schrieb:

    du machst bisher autorelease UND release. eins von beiden reicht aber!

    wenn du das aber nicht weist/verstehst dann solltest du wirklich was einführendes lesen
    Das ist im Code in der Tat doppelt, der Code läuft aber nur, wenn ich beides weglasse. Wenn ich Autorelease ODER release ausführe, gibt es einen Crash.


    im eingangsthread sagst du aber ganz was anderes!?
    Danke für den Hinweis, ich habe den Text korrigiert - Asche über mein Haupt.
    der Code läuft aber nur, wenn ich beides weglasse. Wenn ich Autorelease ODER release ausführe, gibt es einen Crash. :love:
  • klawitter schrieb:

    gritsch schrieb:

    klawitter schrieb:

    gritsch schrieb:

    du machst bisher autorelease UND release. eins von beiden reicht aber!

    wenn du das aber nicht weist/verstehst dann solltest du wirklich was einführendes lesen
    Das ist im Code in der Tat doppelt, der Code läuft aber nur, wenn ich beides weglasse. Wenn ich Autorelease ODER release ausführe, gibt es einen Crash.


    im eingangsthread sagst du aber ganz was anderes!?
    Danke für den Hinweis, ich habe den Text korrigiert - Asche über mein Haupt.
    der Code läuft aber nur, wenn ich beides weglasse. Wenn ich Autorelease ODER release ausführe, gibt es einen Crash. :love:


    dann hast du irgendwo anders einen bug.
  • Also ich mir nicht sicher ob ich dem Wirrwarr zu so später Stunde noch folgen kann, aaaaaber....

    Die Von Dir verwendete Methode

    NSDictionary *temp =[[NSDictionary alloc] initWithObjectsAndKeys:animals,@"A",animals2,@"B",nil];

    beinhaltet ein implizites Autorelease. Du schreibst da selbst keines mehr hin.
    Der Release erfolgt zu gegebener Zeit durch den Autorelease Pool.
  • stef schrieb:

    Also ich mir nicht sicher ob ich dem Wirrwarr zu so später Stunde noch folgen kann, aaaaaber....

    Die Von Dir verwendete Methode

    NSDictionary *temp =[[NSDictionary alloc] initWithObjectsAndKeys:animals,@"A",animals2,@"B",nil];

    beinhaltet ein implizites Autorelease. Du schreibst da selbst keines mehr hin.
    Der Release erfolgt zu gegebener Zeit durch den Autorelease Pool.


    nein, da ist kein implizites dabei (methode beginnt mit INIT) aber er hat eines dabei!
  • ich

    stef schrieb:

    Also ich mir nicht sicher ob ich dem Wirrwarr zu so später Stunde noch folgen kann, aaaaaber....

    Die Von Dir verwendete Methode

    NSDictionary *temp =[[NSDictionary alloc] initWithObjectsAndKeys:animals,@"A",animals2,@"B",nil];

    beinhaltet ein implizites Autorelease. Du schreibst da selbst keines mehr hin.
    Der Release erfolgt zu gegebener Zeit durch den Autorelease Pool.
    ich dachte, zu jedem Alloc gehört auch ein release oder ein autorelease?
  • klawitter schrieb:

    ich

    stef schrieb:

    Also ich mir nicht sicher ob ich dem Wirrwarr zu so später Stunde noch folgen kann, aaaaaber....

    Die Von Dir verwendete Methode

    NSDictionary *temp =[[NSDictionary alloc] initWithObjectsAndKeys:animals,@"A",animals2,@"B",nil];

    beinhaltet ein implizites Autorelease. Du schreibst da selbst keines mehr hin.
    Der Release erfolgt zu gegebener Zeit durch den Autorelease Pool.
    ich dachte, zu jedem Alloc gehört auch ein release oder ein autorelease?


    ist auch so. seine aussage war falsch.
  • klawitter schrieb:

    Hallo Experten,

    ich habe ein Memory-Problem, das mich nicht loslässt, bin für Eure Hilfe dankbar.

    Hier ist der Code:

    Quellcode

    1. if (animals)
    2. {
    3. NSDictionary *temp =[[[NSDictionary alloc] initWithObjectsAndKeys:animals,@"A",animals2,@"B",nil] autorelease];
    4. self.tableContents = temp;
    5. self.sortedKeys =[[self.tableContents allKeys] sortedArrayUsingSelector:@selector(compare:)];
    6. [temp release];
    7. }


    Probiere mal so:

    Quellcode

    1. self.tableContents = [NSDictionary dictionaryWithObjectsAndKeys: . . . . ];
  • ramo schrieb:

    klawitter schrieb:

    Hallo Experten,

    ich habe ein Memory-Problem, das mich nicht loslässt, bin für Eure Hilfe dankbar.

    Hier ist der Code:

    Quellcode

    1. if (animals)
    2. {
    3. NSDictionary *temp =[[[NSDictionary alloc] initWithObjectsAndKeys:animals,@"A",animals2,@"B",nil] autorelease];
    4. self.tableContents = temp;
    5. self.sortedKeys =[[self.tableContents allKeys] sortedArrayUsingSelector:@selector(compare:)];
    6. [temp release];
    7. }


    Probiere mal so:

    Quellcode

    1. self.tableContents = [NSDictionary dictionaryWithObjectsAndKeys: . . . . ];

    ramo schrieb:

    klawitter schrieb:

    Hallo Experten,

    ich habe ein Memory-Problem, das mich nicht loslässt, bin für Eure Hilfe dankbar.

    Hier ist der Code:

    Quellcode

    1. if (animals)
    2. {
    3. NSDictionary *temp =[[[NSDictionary alloc] initWithObjectsAndKeys:animals,@"A",animals2,@"B",nil] autorelease];
    4. self.tableContents = temp;
    5. self.sortedKeys =[[self.tableContents allKeys] sortedArrayUsingSelector:@selector(compare:)];
    6. [temp release];
    7. }


    Probiere mal so:

    Quellcode

    1. self.tableContents = [NSDictionary dictionaryWithObjectsAndKeys: . . . . ];
    danke, das hat funktioniert.

  • klawitter schrieb:

    ?
    Ist es nun gelöst oder nicht ? :D



    Quellcode

    1. if (animals)
    2. {
    3. NSDictionary *temp =[[[NSDictionary alloc] initWithObjectsAndKeys:animals,@"A",animals2,@"B",nil] autorelease];
    4. self.tableContents = temp;
    5. self.sortedKeys =[[self.tableContents allKeys] sortedArrayUsingSelector:@selector(compare:)];
    6. }
    _____________________________
    Alle Angaben ohne Gewähr :)

    On the internet you can be anything you want. It's strange that so many people choose to be stupid.


    Superbientem animus prosternet
  • Warum dann ein Fragezeichen und wo bleibt die Lösung für die Nachwelt ?
    _____________________________
    Alle Angaben ohne Gewähr :)

    On the internet you can be anything you want. It's strange that so many people choose to be stupid.


    Superbientem animus prosternet
  • NSDictionary *aDict = [[NSDictionary alloc] initWith .. whatsoever]; retainCount = 1
    (ab hier ist es Dein Object und Du kümmerst Dich darum)
    self.anotherVariable = aDict; retainCount = 2
    [aDict release]; retainCount = 1

    fertig

    @property(nonatomic, retain) NSDictionary *anotherVariable;
    @synthesize anotherVariable;


    - (void)dealloc {
    [anotherVariable release];
    }
  • HHuckebein schrieb:

    NSDictionary *aDict = [[NSDictionary alloc] initWith .. whatsoever]; retainCount = 1
    (ab hier ist es Dein Object und Du kümmerst Dich darum)
    self.anotherVariable = aDict; retainCount = 2
    [aDict release]; retainCount = 1

    fertig

    @property(nonatomic, retain) NSDictionary *anotherVariable;
    @synthesize anotherVariable;


    - (void)dealloc {
    [anotherVariable release];
    }


    Danke, so habe ich es gemacht, das läuft.
    Der Fehler lag daran, dass ich in einer Klasse in

    - (void)dealloc {

    das
    [super dealloc];

    nicht an das Ende der Methode, sondern an den Anfang gestellt habe.
    :thumbsup:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Erich H. ()