• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Buch: Objective C 2.0 Thema: Speicherlecks (Verständnissprobleme))

Tekl

Fairs Vortrefflicher
Registriert
01.06.05
Beiträge
4.630
Weil ein Objective-C-String erzeugt wird. Ohne wird ein C-String erzeugt. So wie stehst ein @ vor Objective-C-Eigenheiten steht. Scheint eine einfache Regel zu sein.

Und das ist jetzt besonders schlüssig? Warum zwei Sorten Strings? Wenn Obj-C die C-Strings nicht will, hätte man sie auch gleich ersetzen können. Ich verstehe nicht, was die Vermischung soll.

*räusper* Irgendwelche Tippfehler erst zur Laufzeit zu bemerken, hält deutlich länger auf – es sei denn man programmiert nach dem "ich probiere es einfach einmal"-Prinzip. Also nach gar keinem Prinzip.

Mist, ertappt. ;) Natürlich will ich sofort überprüfen, ob etwas korrekt funktioniert und nicht erst stundenlang alles Mögliche tippen und dann hinterher den Fehler in einer großen Menge von Möglichkeiten suchen.

Du meist leichter, als mit dem Cursor auf das Wort gehen und in den bereits auf dem Bildschirm befindlichen Assistenten zu scheuen? Das kann ich mir eigentlich nicht vorstellen. Ist aber auch egal, was das keine Spracheigenschaft ist, sondern eine der IDE.

Welchen Assistenten meinst du? Bei Quick Help steht nur Symbol not found. Zudem nervt der, weil der Xcode ausbremst. Meiner Ansicht nach gehört zu einer Sprache auch eine gute Dokumentation und Referenz. Ob jetzt in der IDE oder nicht. Bei Apple selber wird man ja auch nicht fündig.

Ja, die kenne ich von php.org. Die sind sehr wertvoll. Sieht dann so aus:

Nun, selbst das sinnlose Beispiel zeigt, wie man es einsetzt.

Nein, ein konzeptionelles, syntaktisches und gedankliches Chaos. Leute mit klarem Verstand müssen das hassen.

Was bringt es Dinge zu Hassen, denen man nicht ausweichen kann? Leider ist es ja so, das PHP bei vielen Hostern am performantesten an Apache angebunden ist. Der Rest wird ja meist nur per CGI angebunden.

Du findest in Xcode überhaupt keine Hilfe zu Schlüsselwörtern. Die paar Stück hat man auch im Kopf.

Klar, wenn man da täglich mit arbeitet.

Du findest in Xcode indessen Hilfe zum Framework. Denn das ist riesig.

Ja, das habe ich gemerkt. Ein paar zusätzliche Seiten zu den paar Stück Schlüsselwörtern und kryptischen Zeichen hätten aber sicher nicht geschadet. Bei Google wird ja schnell klar, dass nicht wenige sich beim ersten Kontakt damit fragen, was das bedeutet.

Vermutlich muss man echt dafür geboren sein, endlos Zeit besitzen oder darf keinen Kontakt zu Skriptsprachen gehabt haben. Ich könnte mich wohl nie daran gewöhnen, dass ein Return(@"String") nicht gehen soll.
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Und das ist jetzt besonders schlüssig? Warum zwei Sorten Strings? Wenn Obj-C die C-Strings nicht will, hätte man sie auch gleich ersetzen können. Ich verstehe nicht, was die Vermischung soll.
Das eine ist ein schnöder String. Das andere ist ein Objekt der Klasse NSString.

Siehe: http://developer.apple.com/mac/libr...ntroStrings.html#//apple_ref/doc/uid/10000035

Meiner Ansicht nach gehört zu einer Sprache auch eine gute Dokumentation und Referenz. Ob jetzt in der IDE oder nicht. Bei Apple selber wird man ja auch nicht fündig.
Die Dokumentation ist doch ein Traum. Noch umfassender geht es kaum. Sogar jede Menge Beispielcode und Videotutorials gibt es im Dev Center.

Nun, selbst das sinnlose Beispiel zeigt, wie man es einsetzt.
Ist doch doppelt gemoppelt, wenn vorher detailliert erklärt wird, wie man etwas macht.
add(int a, int b) - Addiert a und b.

Beispielt: ergebnis=add(1,2)
Irgendwie überflüssig, oder?
 

Tekl

Fairs Vortrefflicher
Registriert
01.06.05
Beiträge
4.630
Das eine ist ein schnöder String. Das andere ist ein Objekt der Klasse NSString.

Siehe: http://developer.apple.com/mac/libr...ntroStrings.html#//apple_ref/doc/uid/10000035

Warum lässt man die schnöden Strings dann nicht ganz verschwinden und ersetzt sie durch die String-Objekte und spart sich dann den Klammeraffen?

Ist das hier die einzige Möglichkeit String-Objekte zusammenzufügen?:

Code:
NSString *beginning = @"beginning";
NSString *alphaAndOmega = [beginning stringByAppendingString:@" and end"];

Wo ist das bitte kompakter als:
beginning = "beginning"
alphaAndOmega = beginning + " and end"

Die Dokumentation ist doch ein Traum. Noch umfassender geht es kaum. Sogar jede Menge Beispielcode und Videotutorials gibt es im Dev Center.

Dann suche ich wohl falsch. Wenn ich z. B. gezielt nach "stringWithFormat" suche, komme ich hier hin:
http://developer.apple.com/mac/libr.../apple_ref/occ/clm/NSString/stringWithFormat:

Keine Beispiele außer zeitraubende Downloads.

Ist doch doppelt gemoppelt, wenn vorher detailliert erklärt wird, wie man etwas macht.

Ja, könnte man meinen. Ich schau mir aber zuerst immer das Beispiel an und wenn ich es nicht verstehe lese ich mir die Beschreibung durch. Geht viel schneller.

Irgendwie überflüssig, oder?

Okay, das ist wirklich Banane, aber auch da reicht es sich das Beispiel anzuschauen, statt die Beschreibung zu lesen.
 

Drobs

Carola
Registriert
23.05.08
Beiträge
115
Also jetzt mal im Ernst: Wie lange wollt ihr noch diskutieren?
Ihr vergleicht doch Äpfel mit Birnen.

Ich erlerne bekanntlich grade Objective C und habe vorher schon reichlich Erfahrung mit PHP gesammelt aber ein Vergleich zwischen den beiden würde mir nie einfallen. Aber wenn man es unbedingt machen will:

<persönliche Meinung>

Der Vorteil von PHP ist schlicht und einfach, dass man sehr schnell mit wenig Gedanken an Konsequenzen arbeiten kann und etwas hinzaubert, das zu allem Überfluss auch noch funktioniert.

Dagegen muss man sich bei Obj. C schon wesentlich mehr Gedanken machen, bekommt dafür aber von Apple mit XCode ein mächtiges Tool hingestellt mit dem es unheimlich Spaß macht zu programmieren. Und die Möglichkeiten der Sprache scheinen mir echt so enorm gewaltig zu sein, mit Features vollgestopft, an die ich bei PHP nie gedacht hätte.
Also jetzt mal im Ernst: Wie lange wollt ihr noch diskutieren?
Ihr vergleicht doch Äpfel mit Birnen.

</persönliche Meinung>

Aber beide Sprachen haben nunmal ihre Daseinsberechtigung.

Und zu der Sache mit der Syntaxgewöhnung: Kein Problem, das geht so schnell.
 

Tekl

Fairs Vortrefflicher
Registriert
01.06.05
Beiträge
4.630
Ja, stimmt, wir drehen uns eigentlich im Kreis und wirklich vergleichbar sind die Sprachen nicht.

Bei mir spielt eine Menge Frust mit, dass man unter OS X nicht mal so eben eine kleine GUI-Anwendung zimmern kann, ohne aufwändig ObjC zu lernen. AppleScript-Studio produziert leider auch lahme Programme wie der Skript-Editor.

Werde mir einfach mal MacRuby reinziehen.

War trotzdem eine interessante Diskussion. Und dass so viele gar von ObjC schwärmen, muss ja auch einen Grund haben. Irgendwann steht wohl doch so ein Buch in meinem Regal.
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Und das ist jetzt besonders schlüssig? Warum zwei Sorten Strings? Wenn Obj-C die C-Strings nicht will, hätte man sie auch gleich ersetzen können. Ich verstehe nicht, was die Vermischung soll.
Objective-C importiert einfach vollständig C. Ohne Ausnahmen, ohne Spezialfälle, ohne Bedingungen. Das ist besonders klar und einfach.

Aber du scheinst auf Klarheit ja keinen Wert zu legen.

Mist, ertappt. ;) Natürlich will ich sofort überprüfen, ob etwas korrekt funktioniert und nicht erst stundenlang alles Mögliche tippen und dann hinterher den Fehler in einer großen Menge von Möglichkeiten suchen.
Ein paar Zeilen funktionieren nicht korrekt oder nicht. Ich weiß ja nicht, was du programmieren willst. Aber deine Skripte scheinen so etwas zu machen wie zwei Dateien zu kopieren. Mit programmieren hat das nichts zu tun.

Welchen Assistenten meinst du?
Meines Wissens existiert nur einer.

Bei Quick Help steht nur Symbol not found.
Du bist echt geil.

Zudem nervt der, weil der Xcode ausbremst. Meiner Ansicht nach gehört zu einer Sprache auch eine gute Dokumentation und Referenz. Ob jetzt in der IDE oder nicht. Bei Apple selber wird man ja auch nicht fündig.
Stellt sich nur die Frage, was du eine vernünftige Dokumentation nennst.

Nun, selbst das sinnlose Beispiel zeigt, wie man es einsetzt.
Ja, einen x-beliebigen Wert in die Parameterliste setzen. Geil, das hilft dir also. Wobei gleich noch? Zu erfahren, dass man Parameter in die Parameterliste setzen kann? Na ja, wenn man nur hin und wieder programmiert, vergisst man das ja leicht, nicht wahr?

Erwartest du eigentlich auch einen Schreibmaschinenkurs. Das ist deutlich nützlicher.

Was bringt es Dinge zu Hassen, denen man nicht ausweichen kann? Leider ist es ja so, das PHP bei vielen Hostern am performantesten an Apache angebunden ist. Der Rest wird ja meist nur per CGI angebunden.
Mir ist eigentlich ziemlich egal, woran das völlig vercrappte Chaos liegt. Es ändert ja nichts daran, dass es völlig vercrapptes Chaos ist. Du klingst wie ein Windowsler, der erklärt, warum Windows so mies ist. Interessiert mich nur nicht.

Klar, wenn man da täglich mit arbeitet.
Ja, das ist so wie die Parameter in der Parameterliste. Das kann man leicht vergessen.

Ja, das habe ich gemerkt. Ein paar zusätzliche Seiten zu den paar Stück Schlüsselwörtern und kryptischen Zeichen hätten aber sicher nicht geschadet. Bei Google wird ja schnell klar, dass nicht wenige sich beim ersten Kontakt damit fragen, was das bedeutet.
Natürlich fragen sich Leute, die keine Ahnung vom Programmieren haben, was das bedeutet. Und?

Es gibt auch Leute, die sich fragen, was eine Menüleiste ist. Soll das auch erläutert werden? Wenn du einen Computerführerschein benötigst, musst du nen VHS-Kurs besuchen.

Vermutlich muss man echt dafür geboren sein, endlos Zeit besitzen oder darf keinen Kontakt zu Skriptsprachen gehabt haben. Ich könnte mich wohl nie daran gewöhnen, dass ein Return(@"String") nicht gehen soll.
Was soll daran nicht gehen? Es wird die Funktion Return mit dem Parameter @"String" aufgerufen. steht da doch. Wo liegt das Problem?
 

Ares83

Hibernal
Registriert
10.10.07
Beiträge
2.011
Amin, hattest du gerade zu scharfes Chili? Das ist doch ein Niveau was ich von dir nicht erwartet hätte.
 

Tekl

Fairs Vortrefflicher
Registriert
01.06.05
Beiträge
4.630
Objective-C importiert einfach vollständig C. Ohne Ausnahmen, ohne Spezialfälle, ohne Bedingungen. Das ist besonders klar und einfach.

Aber du scheinst auf Klarheit ja keinen Wert zu legen.

Mir erschließt sich die Klarheit momentan noch nicht. Warum wird ObjC auf normales C aufgepfropft und zweigleisig gefahren, statt einfach ein einheitliche Sprache zu verwenden?

Ein paar Zeilen funktionieren nicht korrekt oder nicht. Ich weiß ja nicht, was du programmieren willst. Aber deine Skripte scheinen so etwas zu machen wie zwei Dateien zu kopieren. Mit programmieren hat das nichts zu tun.

Stimmt, ich will Routineaufgaben vereinfachen und automatisieren. Gerade das Zerpflücken von Strings muss ich öfter mal überprüfen. Von aufwändigen Anwendungen halte ich mich lieber fern. Du wirst das sicher begrüßen. ;)

Stellt sich nur die Frage, was du eine vernünftige Dokumentation nennst.
Eine vernünftige Dokumentation führt bei verschiedenen Herangehensweisen zum Ziel. So sollte bei der Suche nach einem Schlüsselwort auch fündig werden.

Ja, einen x-beliebigen Wert in die Parameterliste setzen. Geil, das hilft dir also. Wobei gleich noch? Zu erfahren, dass man Parameter in die Parameterliste setzen kann? Na ja, wenn man nur hin und wieder programmiert, vergisst man das ja leicht, nicht wahr?
Da Beispiel war natürlich sehr simpel. Ich weiß, dass man bei ObjC in der glücklichen Situation ist, dass man sich z. B. keine Parameterreihenfolge mehr merken muss. Aber wenn ich z. B. bei Javascript wissen möchte wo offsetWidth abgefragt werden kann, sind auch simple Beispiele hilfreich.

Erwartest du eigentlich auch einen Schreibmaschinenkurs. Das ist deutlich nützlicher.
Meine Erwartung resultiert schlicht aus Erfahrung mit anderen Sprachen, bei den meisten kann ich jedes Schlüsselwort direkt nachschlagen.

Mir ist eigentlich ziemlich egal, woran das völlig vercrappte Chaos liegt. Es ändert ja nichts daran, dass es völlig vercrapptes Chaos ist. Du klingst wie ein Windowsler, der erklärt, warum Windows so mies ist. Interessiert mich nur nicht.
Niemand zwingt dich. Aber nur weil dir Linksverkehr besser gefällt, musst dich trotzdem mit Rechtsverkehr arrangieren. Ich habe ja auch nicht gesagt, dass die Nötigung PHP verwenden zu müssen dessen Chaos relativiert, sondern nur, dass die Erkenntnis des Chaos in der Praxis nicht weiterhilft.

Natürlich fragen sich Leute, die keine Ahnung vom Programmieren haben, was das bedeutet. Und?
Sie würden vermutlich nicht fragen, wenn es direkt in der Doku stehen würde.

Es gibt auch Leute, die sich fragen, was eine Menüleiste ist. Soll das auch erläutert werden? Wenn du einen Computerführerschein benötigst, musst du nen VHS-Kurs besuchen.
Was heißt soll, es wird doch in der Mac-Hilfe erläutert. ;)

Was soll daran nicht gehen? Es wird die Funktion Return mit dem Parameter @"String" aufgerufen. steht da doch. Wo liegt das Problem?

Sorry, meinte keine Funktion, sondern das Return-Schlüsselwort. Hatte irgendwo eine Erklärung gelesen, dass das nicht geht, weil der String noch kein Objekt wäre oder so. Kann natürlich auch falsch gewesen sein. Kann ich aber nicht prüfen, da Schlüsselwörter ja in der Doku nicht vorkommen.

Deine Geduld ist übrigens bewundernswert. ;)
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Mir erschließt sich die Klarheit momentan noch nicht. Warum wird ObjC auf normales C aufgepfropft und zweigleisig gefahren, statt einfach ein einheitliche Sprache zu verwenden?

Weil normales C keine objektorientierte Programmiersprache ist. Also hat man sie mit ObjC erweitert.
 

Jamsven

London Pepping
Registriert
21.11.07
Beiträge
2.046
Mir erschließt sich die Klarheit momentan noch nicht. Warum wird ObjC auf normales C aufgepfropft und zweigleisig gefahren, statt einfach ein einheitliche Sprache zu verwenden?
Du kannst C Programme einfach in Objective C Programme konvetrieren.
Bzw wird ObjektiveC im Build Prozess in ein C Programm gewandelt. Es ist nicht wie C++ die jüngere modernere Schwester von C, sondern C wurde zu Superman(OC).
 

Tekl

Fairs Vortrefflicher
Registriert
01.06.05
Beiträge
4.630
... Bzw wird ObjektiveC im Build Prozess in ein C Programm gewandelt

Achso, ich verstehe. Also ist ObjC auch quasi nur ein Framework was schlicht die Arbeit mit C erleichtert? Also quasi eine Funktionssammlung? Ich dachte immer, es soll eine eigene Sprache sein, also quasi eine Neuentwicklung auf Basis von C?
 

Jamsven

London Pepping
Registriert
21.11.07
Beiträge
2.046
Achso, ich verstehe. Also ist ObjC auch quasi nur ein Framework was schlicht die Arbeit mit C erleichtert? Also quasi eine Funktionssammlung? Ich dachte immer, es soll eine eigene Sprache sein, also quasi eine Neuentwicklung auf Basis von C?
Es gibt eine ObjC Runtime:
http://developer.apple.com/mac/libr...rence/ObjCRuntimeRef/Reference/reference.html

Das sind alles C typische Funktionen.

Da wird zum Beispiel aus:
Code:
[object addObject:foo];
Code:
objc_msgSend(object,6, foo)
Wobei 6 der Selektor für die Methode addObject: in diesem Beispiel ist.
 

Tekl

Fairs Vortrefflicher
Registriert
01.06.05
Beiträge
4.630
Interessant. Dass heißt es passiert noch mehr, als nur eine andere Schreibweise bereitzustellen? Ohne diese Runtime würden Programme dann nicht funktionieren?
 

gKar

Maunzenapfel
Registriert
25.06.08
Beiträge
5.362
Achso, ich verstehe. Also ist ObjC auch quasi nur ein Framework was schlicht die Arbeit mit C erleichtert? Also quasi eine Funktionssammlung? Ich dachte immer, es soll eine eigene Sprache sein, also quasi eine Neuentwicklung auf Basis von C?

Objective-C ist schon eine Sprache, da sie offensichtlich ihre eigene Syntax hat und einen Objective-C-Compiler braucht. Wenn auch keine komplett neue Sprache, sondern eben eine Erweiterung von C, so dass ein Objective-C-Programm teilweise „herkömmlichen“ C-Code und teils speziellen Objective-C-Code enthält.
Stell Dir einfach vor, dass der Objective-C-Compiler die Objective-C-Anteile eines Programms nach C übersetzt, bevor dann der C-Compiler daraus ein Binary erzeugt.

(So dürfte das doch, ggf. etwas vereinfacht, stimmen. Wenn nicht, werden mich die Experten sicher berichtigen ;) )
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Es gibt eine ObjC Runtime:
http://developer.apple.com/mac/libr...rence/ObjCRuntimeRef/Reference/reference.html

Das sind alles C typische Funktionen.

Da wird zum Beispiel aus:
Code:
[object addObject:foo];
Code:
objc_msgSend(object,6, foo)
Wobei 6 der Selektor für die Methode addObject: in diesem Beispiel ist.

Das wäre aber fürhes Binden wie in C++. Der Selector ist tatsächlich "addObject:", also ein C-String. Allerdings muss jeder Selector registriert werden und kann umgewandelt sein. Derzeit (aka bis Leopard überprüft) handelt es sich nur um den C-String zum Nethodennamen.

Eds gibt die "offizielle" Umwandlungsfunktion sel_getName(), die einen Selecotr bekommt und daraus einen C-String macht. AFAIK besteht die jedoch nur aus return selector;
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Objective-C ist schon eine Sprache, da sie offensichtlich ihre eigene Syntax hat und einen Objective-C-Compiler braucht. Wenn auch keine komplett neue Sprache, sondern eben eine Erweiterung von C, so dass ein Objective-C-Programm teilweise „herkömmlichen“ C-Code und teils speziellen Objective-C-Code enthält.
Stell Dir einfach vor, dass der Objective-C-Compiler die Objective-C-Anteile eines Programms nach C übersetzt, bevor dann der C-Compiler daraus ein Binary erzeugt.

(So dürfte das doch, ggf. etwas vereinfacht, stimmen. Wenn nicht, werden mich die Experten sicher berichtigen ;) )

Früher war das tatsächlich so, wie man das ja häufig bei Spracherweiterungen macht. AFAIK hat aber der aktuelle gcc wirklich einen eigenen Objective-C-Compiler, wobei da sicherlich eine Verquickung mit dem C-Compiler besteht.