2 Stimmen

Die dynamische Laufzeit von Objective-C verstehen

Ich fange gerade an, mich in Objective-C und Cocoa einzuarbeiten, und mir ist aufgefallen, dass alle Objekte aus dem Heap zugewiesen werden.

Gibt es einen Grund, warum dies der Standard in Objective-C ist? Ich bin besonders daran interessiert, weil Objective-C als eine strenge Supermenge von C mit OO-Funktionen angesehen wird.

2voto

Javier Punkte 58737

Ich denke, das ist dem Smalltalk-Erbe geschuldet.

Man könnte auch sagen, dass stack-allocated objects eine Besonderheit von C++ sind. Nur sehr wenige andere Sprachen tun dies, und dann meist als Low-Level-Optimierung für den Compiler. In C++ ist es vernünftig, denn eines der erklärten Ziele war es, die genau so leistungsfähig wie einfaches C.

Warum steht dies Ihrer Meinung nach im Widerspruch zu der Tatsache, dass Objective-C eine Supermenge von C ist? Schließlich kann einfaches C weder Objekte auf dem Stack zuweisen... noch irgendwo anders. struct s, OTOH, sind auf dem Stapel erlaubt, sowohl auf C und Objective-C

0 Stimmen

"Plain C kann keine Objekte auf dem Stack allozieren... noch sonstwo" Nun, ich denke schon, denn es gibt KEINE Objekte (Nun ja, Strukturen und andere Hacks, die OO-Features "simulieren" können...) Warum ich das Gefühl hatte, dass es in Konflikt steht, ist nur, weil C sowohl Stack- als auch Heap-Allokation unterstützt, und so war es natürlich anzunehmen, dass C++ dies auch für seine Objekte tun würde, was es auch tat. Und so auch Objective-C. Aber, nada. Wie auch immer, ich bin mit Ihrer Antwort zufrieden, aber ich halte mich mit der "Richtig-Stimme" zurück, um andere Antworten abzuwarten/zu ermutigen :)

0voto

Marco Mustapic Punkte 3859

Ich beantworte Ihre Frage nicht genau, aber da Sie die Laufzeit von Obj-C verstehen, hier die Antwort. Mit NSZones können Sie Objekte effizienter zuweisen. Sie werden sie nicht auf dem Stack haben, aber zumindest können Sie einige Fragmentierungs- und Leistungsprobleme vermeiden: Linktext

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X