/ / NSMutableArray wird veröffentlicht? - Ziel-C, Kakao, Memory-Management, Retaincount

NSMutableArray wird veröffentlicht? - Ziel-C, Kakao, Speicherverwaltung, Zurückhalten

Ich habe ein NSMutableArray, dessen Eigenschaft (nicht-atomar, beibehalten) ist, und es wird aus irgendeinem Grund freigegeben. Hier ist der Code, wenn ich ihn zugebe (tableData ist das NSMutableArray):

tableData = [[[NSMutableArray alloc] init] autorelease];

Wenn ich es zuteile, ist es Retain Count 1. Wenn ich es tableData zugebe, ist der Beibehaltungszähler 2. Dann sollte es bei automatischer Freigabe am Ende des Runloops auf 1 gehen (was ich will). Aber das passiert nicht. Wenn ich später darauf verweise und eine Methode ausführe, erhalte ich zufällige Objekte (letztes Mal war es UITabBarSwappableImageView) und es wird angezeigt, dass ein unbekannter Selektor gesendet wurde. Was Sinn macht ... das Objekt wird freigegeben und ein anderes Objekt nimmt seinen Platz ein ... Aber warum wird es freigegeben? Vielen Dank.

Antworten:

2 für die Antwort № 1

Haben Sie die Punktsyntax verwendet? Wenn nicht, wird der synthetisierte Setter nicht verwendet, sodass die Referenz nicht beibehalten wird.

Es sollte so vergeben sein:

self.tableData = [[[NSMutableArray alloc] init] autorelease];

3 für die Antwort № 2

Es wird veröffentlicht, weil es zuweisen tableData ändert nichts an der Retain-Zählung.

Sie kopieren einfach einen Zeigerwert von einem Steckplatz im Speicher in einen anderen Steckplatz. Es wird keine Nachricht gesendet, die auf einen Eigentümerwechsel hinweist.

Sie müssen die Setter-Methode tatsächlich aufrufen:

[self setTableData:[NSMutableArray array]];

Oder wenn Sie die Punktsyntax bevorzugen:

self.tableData = [NSMutableArray array];