2010-12-27 10 views
1

ich zur Zeit ein App Umschreiben, und ich kann mir diesen Fehler nicht erklären:Objekt freigegeben ohne meine Zustimmung

Ich habe eine Klasse „Player“ mit einem NSMutableArray Namen „Stücken“. Wenn ich aus diesem Array das letzte "Piece" -Objekt meines ersten Spielers entferne (ich habe zwei und dieser Fehler tritt nur beim ersten auf), wird das Player-Objekt deallokiert.

Wenn Sie eine Idee für diesen Fehler haben ... ich bin immer noch hier, wenn Sie irgendein Stück Code müssen verstehen ...

+0

Zeigen Sie uns Ihren Code. –

+0

Sie haben dieses Objekt wahrscheinlich (automatisch) irgendwo anders veröffentlicht. Bitte zeigen Sie Code, wo Sie Daten in das Array eingeben und wo Sie es löschen. – Eiko

+0

Es tut mir leid, ich habe gerade andere Tests ausgeführt und mein Problem ist nicht mit dem Array ... Wenn mein Array leer ist (nur in diesem Fall), wenn ich diese Zeile aufrufen: piece.owner = player; mein alter Spieler ist dealloc'd – Cyril

Antwort

2

Das ist, weil Eigentümer Eigentum wahrscheinlich behalten Eigenschaft implementiert wird.

So Stücke besitzen einen Verweis auf Spieler und Spieler ist nicht dealloc, bis Ihr letztes Stück freigegeben wird. Sie geben Ihren Player wahrscheinlich dort frei, wo Sie nicht sollten und behalten ihn dort, wo Sie nicht sollten (in Stückobjekt).

Ersetzen Sie die Eigentümereigenschaft durch (nicht atomisch, zuweisen) und verfolgen Sie den Ort, an dem Sie den Player freigeben.

+0

OK mein Player wurde an zwei Stellen beibehalten, aber es war die Quelle des Fehlers, als Anfänger in dieser Sprache habe ich die Retain-Eigenschaft übersteuert. Ich habe jetzt verstanden, wie man es benutzt. Vielen Dank ! – Cyril

+2

Sie müssen wirklich den IOS Memory Management Artikel lesen, den Sie auf der Apple Dev Site finden. Es dauert 30 Minuten, um zu lesen, und Sie werden stundenlanges Debuggen vermeiden und sich fragen, was Sie vermissen. – VdesmedT

Verwandte Themen