Frage

Ich habe gelernt Anwendungen auf dem Kakao Touch-Plattform zu entwickeln. Ich habe einen langen Weg zurückgelegt, aber ein Stück, das ich nicht meinen Kopf wickeln kann um Speicherverwaltung ist.

Ich dachte, ich eher einen Weg des Vergleichs nehmen würde als zu versuchen, von Grund auf neu zu starten. Ich kann nicht viel über den Unterschied zwischen der CLR finden (.net) und Objective-C 2.0, so frage ich mich, ob die Stack-Überlauf-Gemeinschaft mir mit dieser Frage helfen kann.

Was sind die Schlüssel / wichtige Unterschiede in der Speicherverwaltung zwischen Objective-C 2.0 und der CLR? Im Hinblick auf Objective-C 2.0, entwickle ich auf dem iPhone O und die Autofreigabe Funktionalität abgeraten.

Ich glaube, ich bin für einen Vergleich des beide suche ... Da ich aus einem .NET-Hintergrund kommen werde, was sein könnte, was ich über Objective-C 2.0 Speicherverwaltung wissen müssen?

Vielen Dank!

War es hilfreich?

Lösung

Die CLR läuft in einer virtuellen Maschine; alle die Aufhebung der Zuordnung von Aufgaben werden durch das Garbage-Collection-System abgewickelt. Im Allgemeinen in Objective-C-Speicher muss entweder manuell über alten von beibehalten / Release C Stil malloc / free oder über das Referenzzählung System verwaltet werden. Wenn Sie von einem Standard „C“ Hintergrund kommen, wird die Technik nicht zu fremd erscheinen.

Mit der Referenzzählung, das System zählt, wie oft ein bestimmtes Objekt verwendet wird - dies im Grunde der „Retain“ ist oben erwähnt. Wenn etwas getan wird ein Objekt mit dem Objekt manuell eine „Freigabe“ Nachricht senden, die das von 1.em Beibehaltungszähler des Objekts dekrementiert Wenn die Zählung 0 erreicht, das System automatisch das Objekt freigibt. Dies wird äußerst umständlich scheint im Vergleich zu dem CLR / .NET, aber dieser Mechanismus bietet eine bessere Leistung und mehr Kontrolle.

Wenn Sie in Objective-C 2.0 auf dem Macintosh-Codierung sind, sind Sie im Glück, da der Garbage Collection kann über eine Option in XCode aktiviert werden. Dies wird näher an, was die CLR zur Verfügung stellt. Wenn Sie auf dem iPhone entwickeln, kostet Garbage Collection zu viel in Bezug auf Speicher und CPU so dass sie nicht eine Option. Speicher muss manuell verwaltet werden.

Zum Glück gibt es eine Zwischen Option, die durch das Senden und „Autofreigabe“ Nachricht an ein Objekt häufig verwendet wird. Dieser Mechanismus, der in Macintosh und das iPhone enthalten ist, im Grunde Pools zugeordneten Objekte in ein globales Wörterbuch (es ist eigentlich ein Autofreigabepool genannt). Entweder, wenn die Anwendung vorhanden ist oder wenn der Pool leer ist, werden die Objekte dann de-zugewiesen. Allerdings geht nicht alles in den Autofreigabepool noch wollen Sie alles, was es setzen. Ich empfehle die trockene, aber wichtige Lektüre der Objective-C 2.0-Programmiersprache von der Apple-Website, die in Art und Weise näher geht.

http://developer.apple.com/documentation /Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html

Viel Glück und viel Geduld. Objective-C ist kein neues Kind auf dem Block wie .Net (seine über 25 Jahre alt), aber es hat einige unglaubliche Features, die .Net gerade jetzt beginnt, zu übernehmen.

Andere Tipps

Auf dem iPhone ist es manuell. Wenn Sie Speicher reservieren oder behalten, müssen Sie ihn freigeben.

In der .NET-CLR Sie ist es egal, wie das Gedächtnis ist oder welche Aufgabe mit ihm tun, zum größten Teil.

Für das iPhone müssen Sie mit einem Release jede Objektzuordnung, init oder behalten auszubalancieren. Da das iPhone ein einfaches Referenzzählung Mechanismus verwendet, wenn der Zähler auf 0 fällt, wird das Objekt erhalten aufgeräumt.

Eine Sache, die ich bin gewöhnungs benötigt, um Sie eine Eigenschaft haben können, die automatisch ein, nicht behalten so, wenn Sie ein Objekt erstellen, dann ordnen Sie es die Eigenschaft wird es eine Anzahl von 2 hat, was besser funktioniert, ist das Erstellen Objekt in einer temporären Variable auf die Eigenschaft zuweisen, dann lassen Sie die temporäre Variable, um den Countdown zu 1

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