2010-04-11 3 views
5

Ich denke daran, eine App für das iPhone zu schreiben. Aber ich bin verwirrt in Bezug auf die objektive Sprache. Habe ich Recht, wenn ich sage, dass ich meine eigene Speicherverwaltung machen muss? Ist Objective-C eine verwaltete Sprache wie C# und/oder Java?Hat Objective-C einen Garbage Collector auf dem iPhone?

Vielen Dank!

Antwort

11

„Managed“ ist ein Marketing-Begriff, die keine technische Bedeutung hat. Objective C für das iPhone ist nicht Müll gesammelt, sondern verwendet Speicher zählen Speicherverwaltung. In gewissem Sinne müssen Sie Ihr eigenes Speichermanagement durchführen, aber es ist darauf beschränkt, das Cocoa retain counting methodology zu kennen.

Edit: Meine Kommentare zu "verwaltet" beziehen sich auf eine previous post version. Der Kommentar ist hier, weil ich es satt habe, das Wort zu sehen.

0

Die Antwort ist in Objective-C nicht spezifisch. Wenn du iPhone Entwicklung machst, nein ... es gibt keinen Garbage Collector. Wenn Sie jedoch für Mac OSX entwickeln, gibt es eine Garbage Collection.

3

Es gibt keine Garbage Collection-Funktion. Jedoch hat jedes Objekt, das Sie copy, retain, alloc usw. haben, seine Retain-Zählung um eins erhöht, und Sie sind verantwortlich für den Aufruf einer release oder autorelease - Sie besitzen eine Instanz dieses Objekts. Wenn Sie nicht [<YOUROBJECT> release]; oder [<YOUROBJECT> autorelease]; nennen, bleibt das Objekt in dem iPhone/iPod Touch/die iPad-Speicher, aber der Zeiger nicht mehr bleibt, und ein Speicherverlust tritt auf, da die Bit-Speicher nicht mehr zugegriffen werden kann. Autoreleasing fügt das Objekt dem Autorelease-Pool hinzu und bedeutet, dass es irgendwann in der Zukunft veröffentlicht wird. Verwenden Sie immer eine Standard-release wo möglich, als autorelease bedeutet, dass es noch im Speicher des Geräts für eine Weile bleiben, können Sie nie sicher sein, wenn es freigegeben wird, und es ist eine etwas anspruchsvollere Methode aufzurufen.

Rufen Sie nie dealloc auf ein Objekt - Freigabe oder Autoreleasing ist ausreichend, und bei Bedarf wird das Objekt automatisch entfernt.

Stellen Sie sicher, dass Sie niemals Objekte freigeben, die Sie nicht besitzen. Wenn Sie Objekte freigeben, geben Sie sie frei, nachdem Sie sie nicht mehr verwenden. Andernfalls können Sie versuchen, auf dieses Objekt zuzugreifen das Objekt und die Situation Ergebnisse in Ihrer Anwendung aufgrund eines EXEC_BAC_ACCESS Fehler Absturz -, um die Wurzel des Problems, offene Instruments herauszufinden, die Objektzuordnung Instrument hinzufügen und NSZombie Erkennung in seinen Präferenzen (oder fügen Sie die Zombies Instrument (nur aktivieren in iPhone SDK 3.2 +)). Sie können dann den gesamten Verlauf des Objekts anzeigen, das das Problem verursacht, und zu der genauen Codezeile springen, die das Problem verursacht hat.

können Sie mehr here lesen.

Hoffe das half

Verwandte Themen