Frage

ich eine Menge Probleme habe mit NSDate Objekte vorzeitig freigegeben werden. Ich vermute, dass die Fragen im Zusammenhang mit der Art und Weise in Beziehung gesetzt werden kann, dass ich mit den Objekten aus NSDate Bequemlichkeit Methoden zurück befassen. I denkt , dass meine DatumAnz Eigenschaft Erklärung in der JKShow Klasse soll „behalten“, aber ändert es zuweisen oder kopieren scheint in der Frage keine Wirkung zu haben.

JKShow *show; 
NSDate *date;
NSMutableArray *list = [[NSMutableArray alloc] init];

// Show 1
show = [[JKShow alloc] init];
//...
date = [gregorian dateFromComponents:dateComponents];
show.showDate = date;
[list addObject:[show autorelease]];

// Show 2
show = [[JKShow alloc] init];
//...
date = [gregorian dateFromComponents:dateComponents];
show.showDate = date;
[list addObject:[show autorelease]];

UPDATE

Das Problem war nicht in dem Code hier kopiert. In meinem JKShow init Verfahren wurde beibehalten ich nicht aus der NSDate bequemen Methode zurückgegebene Datum. Danke für Ihre Hilfe, jeder.

War es hilfreich?

Lösung 4

ich es herausgefunden, vielen Dank für Ihre Hilfe, aber das Problem war außerhalb des Codes ich hier gepostet. Ich war nicht behalten die NSDate ich in meinem Init-Methode erstellt. Leider hat der Absturz erst auftreten, nachdem ich die beiden neuen NSDate Objekte geschaffen hatte, so war ich total den Holzweg.

Andere Tipps

Das Datum von dateFromComponents zurückgegeben wird in dem Autofreigabepool sein, so sind Sie richtig, dass Ihre DatumAnz Eigenschaft sollte „behalten“ werden. In der Tat sollte es trotzdem sein (es sei denn, Sie speziell „Kopie“ wollen).

Aus dem Code, den Sie gezeigt haben, es sieht aus wie Sie Eigentum an Ihrer Show Objekt geben werden vollständig in die Liste (wie Sie Autorelease auf sie sind einstellen, wie Sie sie hinzufügen). Wollen Sie damit sagen, dass die Datumsobjekte vor der Show ausgeplant werden Objekte aus der Liste kommen (oder die Liste freigegeben wird)?

Auch verwenden Sie synthetisierten Eigenschaften, oder Sie schreiben, sie mit der Hand? Wenn letzteres der Fall, was ist Ihre setShowDate Eigenschaft Methode wie?

Sie können auch versuchen retainCount des Date-Objekts Anmeldung an verschiedenen Orten (obwohl ich immer, dass Autorelease das wirklich finden kompliziert).

Wenn DatumAnz eine Eigenschaft beibehalten, die ausreichend sein sollte, angesichts der Code, den Sie geschrieben haben. Etwas anderes (wahrscheinlich in JKShow Implementierung) kann nicht richtig sein.

Wenn Sie herausfinden wollen, was los ist, können Sie Instrumente verwenden, um die Objekte Lebensdauer zu sehen untersuchen. Sie müssen es mit der Zuordnung Werkzeugsatz laufen behält und gibt zu erinnern. Standardmäßig wird es so einrichten, wenn Sie die Lecks Performance-Tool ausgeführt werden.

Wenn Sie Instrumente wie ausgeführt, dass es alle Objekte Leben umspannt wird aufgezeichnet, und die Backtrace für jeden behalten und läßt gegen sie ausgestellt. Wenn Sie die Objekte durchschauen, eine Ihrer Termine finden, und schauen Sie sich alle behält und gibt sollten Sie in der Lage sein, zu bestimmen, wo die Fehlauslösung geschieht.

Der Code, den Sie zeigte keine vorzeitige Freisetzung Probleme. In der Tat wird es das Array und alles in ihm auslaufen, weil es nicht das Array entbindet.

Sind Sie mit dem Garbage Collector läuft eingeschaltet?

Ist list eine Instanzvariable oder statische Variable, oder ist es eine lokale Variable?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top