Antworten:
Ich würde zuerst C lernen. Ich habe C gelernt (und viel in C gemacht), bevor ich zu Obj-C wechselte. Ich habe viele Kollegen, die nie echte C-Programmierer waren. Sie haben mit Obj-C angefangen und nur so viel C wie nötig gelernt.
Hin und wieder sehe ich, wie sie ein Problem in Obj-C vollständig lösen, was manchmal zu sehr ungeschickten Lösungen führt. Normalerweise ersetze ich dann einen Obj-C-Code durch reinen C-Code (schließlich können Sie sie beliebig mischen, der Inhalt einer Obj-C-Methode kann vollständig reiner C-Code sein). Ohne die Absicht, einen Obj-C-Programmierer zu beleidigen, gibt es Lösungen, die in Obj-C sehr elegant sind. Dies sind Lösungen, die dank Objekten einfach viel besser funktionieren (und aussehen)(OOP-Programmierung kann komplexe Programme viel schöner machen als funktionale Programmierung; Polymorphismus zum Beispiel ist eine brillante Funktion) ... und ich mag Obj-C wirklich (viel mehr als C ++! Ich hasse die C ++ - Syntax und einige Sprachfunktionen sind einfach übertrieben und meiner Meinung nach zu schlechten Entwicklungsmustern führen); Wenn ich jedoch manchmal den Obj-C-Code meiner Kollegen neu schreibe (und das tue ich wirklich nur, wenn ich dies für absolut notwendig halte), ist der resultierende Code normalerweise 50% kleiner und benötigt nur 25% des verwendeten Speichers vor und ist etwa 400% schneller zur Laufzeit.
Was ich hier zu sagen versuche: Jede Sprache hat ihre Vor- und Nachteile. C hat Vor- und Nachteile, ebenso wie Obj-C. Das wirklich großartige Feature von Obj-C (deshalb mag ich es sogar mehr als Java) ist, dass Sie nach Belieben zu einfachem C und wieder zurück springen können. Warum ist das so ein tolles Feature? Weil genau wie Obj-C viele der Nachteile von reinem C behebt, kann reines C einige der Nachteile von Obj-C beheben. Wenn Sie sie zusammenmischen, erhalten Sie ein sehr starkes Team.
Wenn Sie nur Obj-C lernen und keine Ahnung von C haben oder nur die Grundlagen kennen und nie versucht haben, wie elegant es einige häufig auftretende Probleme lösen kann, haben Sie tatsächlich nur die Hälfte von Obj-C gelernt. C ist ein grundlegender Bestandteil von Obj-C. Die Fähigkeit, C jederzeit und überall zu verwenden, ist ein grundlegendes Merkmal davon.
Ein typisches Beispiel war ein von uns verwendeter Code, der Daten in base64 codieren musste, für den wir jedoch keine externe Bibliothek verwenden konnten (keine OpenSSL-Bibliothek). Wir haben einen base64-Encoder verwendet, der vollständig mit Cocoa-Klassen geschrieben wurde. Es funktionierte einwandfrei, aber als wir 200 MB Binärdaten codierten, dauerte es eine Ewigkeit und der Speicheraufwand war nicht akzeptabel. Ich habe es durch einen winzigen, ultrakompakten Base64-Encoder ersetzt, der vollständig als eine C-Funktion geschrieben wurde (ich habe den Funktionskörper in den Methodenkörper kopiert, die Methode hat NSData als Eingabe genommen und NSString als Ausgabe zurückgegeben, aber innerhalb der Funktion war alles C). Der C-Encoder war so viel kompakter, dass er den reinen Cocoa-Encoder um den Faktor 8 in der Geschwindigkeit übertraf und der Speicheraufwand auch viel geringer war. Das Codieren / Decodieren von Daten, das Herumspielen mit Bits und ähnliche Aufgaben auf niedriger Ebene sind nur die Stärken von C.
Ein weiteres Beispiel war ein UI-Code, der viele Grafiken zeichnete. Zum Speichern der zum Zeichnen der Diagramme erforderlichen Daten haben wir NSArrays verwendet. Eigentlich NSMutableArray, da das Diagramm animiert wurde. Ergebnis: Sehr langsame Grafikanimation. Wir haben alle NSArrays durch normale C-Arrays ersetzt, Objekte mit Strukturen (nachdem alle Diagrammkoordinateninformationen nichts sind, was Sie in Objekten haben müssen), Enumeratorzugriff mit einfachen for-Schleifen und haben begonnen, Daten zwischen den Arrays mit memcopy zu verschieben, anstatt Daten von einem Array zu übernehmen der andere, Index für Index. Das Ergebnis: Eine Beschleunigung um den Faktor 4. Das Diagramm wird auch auf älteren PPC-Systemen reibungslos animiert.
Die Schwäche von C ist, dass jedes komplexere Programm auf lange Sicht hässlich wird. C-Anwendungen lesbar, erweiterbar und verwaltbar zu halten, erfordert viel Disziplin von einem Programmierer. Viele Projekte scheitern, weil diese Disziplin fehlt. Obj-C erleichtert Ihnen die Strukturierung Ihrer Anwendung mithilfe von Klassen, Vererbung, Protokollen usw. Trotzdem würde ich keine reine C-Funktionalität über die Grenzen einer Methode hinweg verwenden, es sei denn, dies ist erforderlich. Ich bevorzuge es, den gesamten Code in einer Objective-C-App innerhalb der Methode eines Objekts zu belassen. alles andere macht den Zweck einer OO-Anwendung zunichte. Innerhalb der Methode verwende ich jedoch manchmal ausschließlich reines C.
Sie können C und Objective-C leicht genug gleichzeitig lernen - es ist sicherlich nicht erforderlich, die Minutien von C (einschließlich Zeigerarithmetik usw.) zu lernen, bevor Sie mit den Ergänzungen von Objective-C zur Sprache beginnen, und als Anfänger Wenn Sie schnell mit Objective-C beginnen, können Sie schneller mit dem "Denken in Objekten" beginnen.
In Bezug auf die verfügbaren Ressourcen setzt die Dokumentation von Apple normalerweise voraus, dass Sie mit C vertraut sind. Daher ist es für Sie nicht von großem Vorteil, mit der Programmiersprache Objective-C 2.0 zu beginnen. Ich würde in eine Kopie von Programming in Objective-C von Stephen Kochan investieren (je nachdem, wie schnell Sie loslegen möchten, können Sie auf die zweite Ausgabe warten):
Programmieren der Objective-C-Entwicklerbibliothek Programmieren der Objective-C 2.0-Entwicklerbibliothek
Es setzt keine Vorkenntnisse voraus und lehrt Sie Ziel-C und so viel C, wie Sie benötigen.
Wenn Sie sich ein wenig ehrgeizig fühlen, können Sie mit Scott Stevensons "Learn C" -Tutorial beginnen , das jedoch einige Voraussetzungen erfüllt ("Sie sollten bereits mindestens eine Skript- oder Programmiersprache kennen, einschließlich Funktionen, Variablen und Schleifen. Außerdem müssen Befehle in das Mac OS X-Terminal eingegeben werden. ").
(Nur zur Veranschaulichung und für den Kontext: Ich habe beide gleichzeitig 1991 gelernt - es schien mir keinen Schaden zuzufügen. Ich hatte jedoch einen Hintergrund in BASIC, Pascal, Logo und LISP. )
Ich habe viel über dieses Problem nachgedacht, bevor ich mein Buch über Objective-C geschrieben habe. Erstens glaube ich wirklich, dass das Erlernen der C-Sprache vor dem Erlernen von Objective-C der falsche Weg ist. C ist ein VerfahrenSprache mit vielen Funktionen, die für die Programmierung in Objective-C nicht erforderlich sind, insbesondere für Anfänger. In der Tat widerspricht der Rückgriff auf einige dieser Merkmale der Einhaltung einer guten objektorientierten Programmiermethode. Es ist auch keine gute Idee, alle Details einer prozeduralen Sprache zu lehren (und die Lösung eines Problems mit Funktionen und strukturierten Programmiertechniken anzugreifen), bevor Sie eine objektorientierte lernen. Dies kann den Programmierer in die falsche Richtung führen und möglicherweise zur Entwicklung einer falschen Ausrichtung und Denkweise für die Förderung einer guten objektorientierten Programmierdisziplin führen. Nur weil Objective-C eine Erweiterung der C-Sprache ist, heißt das nicht, dass Sie zuerst C lernen müssen!
Ich denke, dass das Unterrichten von Objective-C und der zugrunde liegenden C-Sprache als eine einzige integrierte Sprache der richtige Ansatz ist. Es gibt keinen Grund zu erfahren, dass eine "for" -Anweisung aus der C-Sprache und nicht aus der übergeordneten Objective-C-Sprache stammt. Warum sollten Sie vorher etwas über Dinge wie C-Arrays und Strings (und deren Manipulation) im Detail lernen?Lernen Sie zum Beispiel Array- (NSArray) und String-Objekte (NSString) kennen? Viele C-Texte verwenden viel Zeit für Strukturen und Zeiger auf Strukturen und durchlaufen Arrays mit Zeigern. Sie können jedoch mit dem Schreiben von Objective-C-Programmen beginnen, ohne diese C-Sprachfunktionen zu kennen. Und für einen unerfahrenen Programmierer ist das eine große Sache. Dies verkürzt nicht nur die Lernkurve, sondern reduziert auch die Menge an Material, die zum Schreiben von Objective-C-Programmen gelernt (und teilweise selektiv herausgefiltert) werden muss.
Ich bin damit einverstanden, dass Sie die meisten, wenn nicht alle der zugrunde liegenden C-Funktionen kennenlernen möchten, aber viele können verschoben werden, bis Sie die Klassen und Methoden genau definiert, mit Objekten und Nachrichtenausdrücken gearbeitet und die Konzepte der Vererbung und verstanden haben Polymorphismus sind gut verstanden.
Ich würde gleich in Ziel C eintauchen - wenn Sie bereits ein paar Sprachen im Griff haben, ist es nicht die Syntax, die die Lernkurve darstellt, sondern Kakao.
Ich denke, dass das Erlernen von C zum größten Teil eine gute Idee ist, egal in welchem Bereich Sie sich befinden, zumindest um das Innenleben der Softwareentwicklung zu verstehen, bevor Sie vorverpackte Waren verwenden, wenn etwas schief geht Sie haben eine bessere Chance, das Innenleben zu verstehen. Auf SO wird viel darüber diskutiert, und es ist eine eher subjektive Frage, aber im Allgemeinen werden Sie C in Ihrem Objective-C-Code von Natur aus verwenden, also liegt es wohl wirklich an Ihnen. Ich bin ein Grundmensch, aber manchmal kann es im Weg stehen und ich kenne mehrere kluge Leute, die sich von oben nach unten durchgearbeitet haben. Ich denke, der wichtige Teil ist, dass Sie das Innenleben so verstehen, wie es will Unterscheiden Sie Ihre Fähigkeiten von denen, die Ihre Fähigkeiten nicht so gut verbessern.
Es ist eine gute Idee, C zu lernen, bevor Sie Objective-C lernen, eine strikte Obermenge von C. Dies bedeutet, dass Objective-C den gesamten normalen C-Code unterstützen kann, sodass der Code, der C-Programmen gemeinsam ist, auch in Objective- angezeigt wird. C-Code.
Neben der rein sprachlichen Betrachtung werden Sie feststellen, dass Mac OS X ein vollständiges Unix-Betriebssystem ist. Alle Bibliotheken auf Systemebene sind in C geschrieben.
Es ist wahrscheinlich möglich, beide gleichzeitig zu lernen, aber ich denke, Sie werden Objective-C mehr schätzen und verstehen, wenn Sie zuerst über solide Kenntnisse in C verfügen.
Ich würde Objective-C lernen und so viel C lernen, wie Sie brauchen, während Sie fortfahren.
Die Bereiche von C, von denen Sie nicht viel abhängen:
Wenn Sie Objective-C und Cocoa lernen, können Sie das Lernen von C-Bits nicht vermeiden. Beispielsweise werden Rechtecke häufig durch CGRect, eine C-Struktur, dargestellt.
Wenn Sie Zeit haben, lernen Sie auf jeden Fall C. Wie andere hier gesagt haben, eignet sich Kochans Buch (zweite und erste Ausgabe) hervorragend als Buch zum Eintauchen.
Es gibt viele Dinge, die Sie in Objective-C nicht nur tun können, daher ist das Erlernen einiger grundlegender C-Fähigkeiten ziemlich wichtig. Sie müssen zumindest die Variablendeklarationen und die grundlegenden Funktionen der C-Bibliothek verstehen, sonst sind Sie frustriert.
Ehrlich gesagt basieren so viele Sprachen auf der C-Syntax, dass es gut ist, damit vertraut zu sein. Ich würde ein oder zwei Wochen brauchen, um mich mit C vertraut zu machen.
Das heißt, ich habe mir nur Ziel C beigebracht, und ich muss ehrlich sein: Ich fand meine C-Erfahrung nicht so nützlich, wie ich gedacht hätte. Ziel C hat mir definitiv die Augen geöffnet.
Sie können direkt in Objective-C springen, mit den folgenden Vorteilen:
Zumindest fällt es mir leichter, eine neue Sprache zu lernen, wenn ich an einer bestimmten App oder einem bestimmten Beispiel interessiert bin, und ich versage, wenn ich etwas anderes lernen muss, das nicht genau das ist, woran ich interessiert bin.
Sie können Ihr C-Wissen später jederzeit verfeinern, wenn Sie sich für die Programmierung auf niedrigerer Ebene interessieren.
Besser, ich weiß es nicht, noch weniger, da ich mit Objective-C nicht vertraut bin.
Aber die Grundlagen von C sind nicht so schwer zu lernen, es ist keine sehr komplexe Sprache (in Bezug auf die Syntax, nicht in Bezug auf das Mastering!), Also machen Sie es, es wird keine Zeitverschwendung sein.
Persönlich denke ich, dass es immer eine gute Idee ist, C zu lernen. Es gibt einen guten Einblick in die Funktionsweise des Computers. Immerhin sind die meisten Sprachen und Systeme immer noch in C geschrieben. Dann fahren Sie fort! :-)
PS.: Mit "weitermachen" meinte ich nicht "fallen lassen", sondern "mehr lernen, anders lernen". Wenn Sie C kennen, werden Sie es möglicherweise nie mehr löschen: Java verwendet JNI, um C-Routinen für Low-Level-Inhalte aufzurufen. Python, Lua usw. werden häufig mit C-Code erweitert (die Lua-Referenz setzt für einige Funktionen nur C-Kenntnisse voraus eine dünne Hülle für die C-Funktion dahinter) und so weiter.
Ja, das Erlernen der C-Sprache vor anderen fortgeschrittenen Sprachen hilft Ihnen dabei, schnell andere Sprachen zu lernen.
C gibt Ihnen sehr wenig Abstraktion von der Assemblierung. Bei einigen C-Compilern können Sie sogar Inline-Assemblierungen durchführen. Dies kann sehr nützlich sein, um darüber nachzudenken, wie der Computer funktioniert, was wichtig zu wissen ist.
Abgesehen davon, wenn Sie wirklich an Object-C interessiert sind, lassen Sie sich nicht davon abhalten, etwas in C zu schreiben, nur weil es "gut für Sie" ist. Sie müssen sich nicht frustrieren, während Sie versuchen, neue Fähigkeiten zu erlernen. Es ist wichtig, dass Sie Spaß an dem haben, was Sie tun.
Möchten Sie ein Hardcore-Entwickler sein? Dann lerne zuerst c.
Die Bücher, die Sie benötigen, um c vollständig zu beherrschen, gehören zu den besten Schriften der Technologie. Folgendes benötigen Sie:
Ziel C unterscheidet sich ausreichend von C, um nicht zuerst C zu lernen.
Aus Sicht der Syntax / Sprachfamilie ist es fast besser, SmallTalk zu studieren (auf dem Ziel C basiert).
Konzentrieren Sie sich aus praktischer Sicht darauf, jeweils eine Sprache zu lernen.
Wenn Sie später eine andere Sprache lernen möchten, sind C ++, Java und Python 1) einfach zu erlernen, 2) beliebt und somit marktfähig, 3) leistungsstark.
Sie sollten Grundkenntnisse in C haben, bevor Sie Objective_C starten, aber Sie müssen nicht jedes Detail von C beherrschen.
Ich habe meine Notizen veröffentlicht, nachdem ich "Programmieren in Objective-C" gelesen habe, falls es jemand anderem hilft.
Abhängig von vielen Sprachen, die Sie bereits kennen, ist es möglicherweise besser, mit dem Erlernen von Objective-C zu beginnen. Die Grundlagen in den meisten Sprachen sind grundsätzlich gleich, die Syntax ist unterschiedlich. Das Erlernen von C zuerst wird beim Erlernen von Objective-C keinen großen Unterschied machen.
Ich habe Objective-C sofort gelernt und es hat seit ungefähr einem Jahr gut funktioniert. Ich hatte nur einige Schwierigkeiten, C-Code zu lesen, als ich das Projekt heruntergeladen habe, um zu sehen, wie sie funktionieren, aber jetzt habe ich wirklich das Bedürfnis, C zu lernen. Sie können versuchen zu lernen ObjC ohne C, aber früher oder später benötigen Sie C.
IMHO sollte man zuerst mindestens etwas C lernen und vor allem über Zeiger. Das ist noch wichtiger, wenn man aus einer Sprache kommt, die keine Zeiger hat. Viele Leute fragen nach Code wie
NSString *string = [[NSString alloc] init];
string = @"something";
da sie nicht über die Unterscheidung zwischen einem Zeiger und dem Objekt Bescheid wissen, auf das er zeigt.
Natürlich muss man nicht alles von C lernen, bevor man mit Objective-C beginnen kann, aber einige grundlegende Dinge sind absolut notwendig.
Nein, gehe direkt zu Ziel C!
Ich bin von ActionScript 3 zu Objective C gewechselt und habe bereits einen Praktikanten in einem Unternehmen!
Tun Sie, was Sie wollen.
Wenn Sie zuvor eine andere Sprache gelernt haben, werden Sie beim Schreiben der richtigen Syntax immer Verwirrung stiften. Ich kenne keinen Zweck, aber Objekt C verwendet eine seltsame (nicht übliche) Syntax zum Aufrufen von Objektmethoden. Es nennt es als Senden von Nachrichten, ja, es ist dementsprechend ein reines objektorientiertes Konzept, jedoch benennen die meisten objektorientierten Sprachen dies als aufrufende Methode und verwenden eine traditionellere Syntax von aufrufenden Methoden. Die Speicherbereinigung ist auch etwas sehr Seltsames. Objekt C basiert auf der Referenzanzahl der alten Schule. Sie werden also Schwierigkeiten haben, es zu akzeptieren, wenn Sie von einer anderen Sprache wechseln. Ich schreibe ein Buch Object C-Kurzmigrationshandbuch für C / C ++ - Programmierer in der Hoffnung, Menschen dabei zu helfen, alle Unterschiede schneller zu erkennen.