2013-08-28 4 views
5

Da Objective-C eine dynamische Eingabesprache ist, warum brauchen wir noch Typen? Ist der Grund, weil es mit C-Code vermischt?Warum Typen für jede Objektvariable in Objective-C deklarieren?

+0

Siehe http://stackoverflow.com/questions/5555855/dynamic-typing-object-c-how-does-itwork – onnoweb

+6

Es ist nicht nur mit C-Code gemischt, es ist eine strenge Obermenge von C. – geoffspear

+1

Sie können , in der Theorie, Code alles als "ID", aber Sie würden sich sehr schnell verwirrt. (Es ist wahr, dass Objective-C ist eine seltsame Mischung aus starker Eingabe und Ente Typisierung. Es ist eine seltsame Bestie.) –

Antwort

18

Objective-C wird nicht mit C gemischt, it's a proper superset of C mit einigen dynamic features.

Sie können die Verwendung von statischen Typisierung auf Objective-C-Objektvariable vermeiden und alles als id deklarieren, aber ich sehe nicht, warum Sie das tun möchten.
Sie würden alle Hilfe verlieren, die Ihnen der Compiler gibt, dank der Typinformationen (bereitgestellt oder abgeleitet).

Um es zu schließen, brauchen Sie keine Typen, Sie wollen Typen.

+3

Genau; Ohne starke Typisierung von Objekten wird aus einem Kompilierzeitfehler ein Laufzeitfehler, oft zur Laufzeit in den Händen Ihrer [potentiellen] Kunden .... Schwach typisierte Sprachen * suck * zum Erstellen komplexer Anwendungen. – bbum

+0

@bbum - Ich würde es nicht ganz so deutlich sagen, aber Sie haben einen Punkt. –

+0

Ich würde Objective-C nicht genau "Superset" von C nennen. Es ist eine Sprache im SmallTalk-Stil, die über eine Art Makroprozessor implementiert wird, der auf C läuft. Dass man C immer noch "erreichen" kann, ist allerdings Zufall eine, die die Entwickler nutzen, um die Notwendigkeit zu vermeiden, die "Gast" -Sprache vollständig zu implementieren. –

0

Objective-C ist eine ordnungsgemäße Superset von C wie es alles tun kann, dass C tun kann, und mehr. Ursprünglich wurde Objective-C als Erweiterung von C erstellt, die auf jedem C-Compiler kompiliert wurde.

Typen können Ihnen sowohl als Programmierer helfen, als auch bei der Beschreibung der Sprachsemantik helfen. Sie verhindern Fehler und können die Performance Ihrer Anwendung erhöhen, da das Laufzeitsystem nicht so hart arbeiten muss.

+0

Wo statische Informationen Informationen können die Leistung erhöhen in Ziel-C? –

+0

Ein Beispiel wäre in einem iterativen Konstrukt. Das Laufzeitsystem müsste bei jeder Iteration prüfen, ob der aktuell zugeordnete Typ einer Variablen mit booleschen Operatoren verwendet werden kann. –

+2

Ich verstehe nicht wirklich, welches Szenario/welche Sprache du beschreibst, aber für Objective-C ist es sicherlich nicht wahr. Seine späte Bindung bedeutet, dass bei jeder Nachricht, die gesendet wird, die Implementierung der Methode erneut vom Selektor gelöst wird. –

Verwandte Themen