• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> Klick

Zeiger sind Mist? C# moderner als Objective-c?

msteffenma

Weigelts Zinszahler (Rotfranch)
Registriert
03.01.08
Beiträge
252
Hallo,

Ich finde langsam rein in die Objective-C Programmierung. Gut, es ist kein Visual Basic. Dieses halte ich für sehr gut und schnell erlernbar. Aber es ist machbar und ich sehe langsam, wie toll vor allen Dingen das COCOA Framework ist.

Ein Freund von mir ist Programmierer und programmiert in einer mittelständischen Firma die komplette Unternehmenssoftware (Clipper).

Vor 3 jahren machte ich mit ihm ein Projekt unter C#. Hat Spass gemacht... Aber ich will ja jetzt unter MAC OS und später vielleicht unter IOS programmieren.

Jetzt hat sich der genannte Freund Mal Objective-c angeschaut und ich habe viele Dinge gehört, die an mir abprallten (MAC ist ja ein Nischengerät, der markt ist zu klein, du legst dich da zu fest auf eine Plattform). OK... Will ich ja auch, da ich Apple Produkte für die bessere Wahl halte. Selbst wenn ich nie eine App vermarkten kann, ist das programmieren eine tolle Sache und dümmer macht es bestimmt nicht.

Nur zwei Argumente kann ich nicht entkräftigen, da ich es nicht weiß, ob es stimmt.

1. Der Carbage Collector unter C# sei besser als unter Objective-c. Die ganze Speicherverwaltung wäre altertümlich, da unter C# sich um die Speicherverwaltung nicht gekümmert werden muss.

2.Zeiger seien generell Mist und gefährlich. Wäre eine alte C Last. Unter C# gibt es deswegen auch keine Zeiger bzw. könnte nur als Option aktiviert werden. Also Aussage: Zeiger -> altmodisch und gefährlich.

Kann mir jemand dies bezüglich etwas erklärendes schreiben? Aber bitte keine Flame gegen Windows etc. Darum geht es mir nicht. Möchte nur wissen, was Sache ist.

Danke und ein gute Nacht wünschend...

Martin S.
 

Pii

Rheinischer Krummstiel
Registriert
25.06.07
Beiträge
383
Die Fakten:
* Modern: Objective-C wurde vor etwa 25 Jahren veröffentlicht und C-Sharp vor 10 Jahren.
* Zeiger: Objective-C ist eine Ergänzung von C. Und C hat Zeiger. Demzufolge hat die auch ObjC.
* Garbage Collector: Objective-C hat gar keine Garbage Collection.

Der Rest der Diskussion ist Blödsinn.
 
  • Like
Reaktionen: _lio_

weasel77

Schöner von Nordhausen
Registriert
05.08.10
Beiträge
322
Programmierer die Zeiger nicht verstehen sind Mist :D

Objective-C 2.0 hat schon GC - aber es spricht auch prinzipiell einiges dagegen. Klar ist es für den Programmierer auf den ersten Blick einfacher. Aber es frisst auch Performance. Zudem, es schadet nicht wenn man als Programmierer weiss und versteht was man tut.
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Dann gebe ich auch noch meinen Senf dazu.

Zu 1. Garbage Collection hat Vor- und Nachteile. Reference Counting hat ebenfalls Vor- und Nachteile. Automatic Reference Counting vereint die Vorteile aus beiden Welten.

Zu 2. Ja, Zeiger können gefährlich sein. Vor allem wenn man mit Zeigerarithmetik herum macht. Zeigerarithmetik braucht man aber in Objective-C nicht. Das beschränkt sich auf simples Zuweisen. Die Gefahr ist überschaubar.

MacApple
 

msteffenma

Weigelts Zinszahler (Rotfranch)
Registriert
03.01.08
Beiträge
252
Danke für eure Antworten. Vor allen Dingen, da ich mich jetzt mit ARC auseinander gesetzt habe. Scheint ja eine Entschärfung zu sein und ich mir dieses Retain, Release Gedöns in meiner Lernphase nicht mehr antun muss.
 

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
Auch wenn es schon gesagt wurde, hier noch die Meinung eines Java/C/Delphi- Entwicklers: Garbage Collection ist okay solang man weiß wie man programmieren sollte bzw. weiß ungefähr was man tut denn Garbage Collection ist auch nicht wirklich perfekt (Aus Java Erfahrung)

Zeiger sind ne tolle Sache und können ganz schön Geschwindigkeit in die Anendung bringen (Binärbaum beispielsweise) aber sie sind ebenso gefährlich, man sollte also dringenst aufpassen was man tut.

Darüber hinaus: Es gibt Möglichkeiten ObjC auch plattformunabhängig auszuführen oder es je plattform zu kompilieren (weiß es nicht mehr so genau)
 

msteffenma

Weigelts Zinszahler (Rotfranch)
Registriert
03.01.08
Beiträge
252
Dann aber eine Frage. Was ist denn an Zeigern gefährlich. Und das dann aber im Kontext zu Obective-C. Was muss ich hier gleich als Anfänger in dieses Sprache beachten.

Einfach nur "ist gefährlich" hilft da nicht sehr bzw. ist nicht sehr lehrreich.

So. Das wichtigste aber- Ich wünsche euch ein frohes Weihnachtsfest.
 
Zuletzt bearbeitet:

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
Um das Zeigermanagement vielleicht zu verstehen und hassen oder leiben zu lernen, Bzw auch mal das ein oder ungewollt andere abzuschießen, bietet sich so eine Programmieraufgabe wie ein Binärbaum an.

Ich selbst habe mit Zeigern nur unter Windows gearbeitet und dort mehrmals alles abgeschossen so das es zu einem BLuescreen gekommen ist (Win XP) Manchmal ach die VM nicht mehr wollte etc.

Vielleicht findest du aber auch das es ein bisschen zu krass ist als Anfänger...
 

msteffenma

Weigelts Zinszahler (Rotfranch)
Registriert
03.01.08
Beiträge
252
Vielleicht findest du aber auch das es ein bisschen zu krass ist als Anfänger...

Das kann sein :). Es geht mir einfach um folgendes. Wie geschrieben kommt dieses Thema durch den Kommentar eines befreundeten Programmierers. Dieser hält C# für moderner. Als Argument wurde mir wie schon geschrieben die Speicherverwaltung und das Programmieren mit Zeigern genannt. Unter C# gibt es keine Zeiger und das sei richtig so.

Wen ich jetzt Objective-C richtig verstanden habe, muss ich nicht Zeigern arbeiten... Kann es aber. Ist das so richtig? Wegen der C Wurzeln.
 

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
Da shast du richtig verstanden. Beide sprachen sind berechtigt ob du nnun die .NET Schiene fährst oder dem Mac treu bist. Theoretisch kannst du mit deiden sprachen beides entwickeln wobei dir das niemand nahelegen wird.

Ein noch C# es ist wie Java nur irgendwie blöd :D - Aber das ist meine Meinung ^^

Vorteil eben an ObjC ist hingegen wenn du willst/musst kannst du Hardware nah programmieren, musst du aber nicht. Mit C# ist das nur bedingt möglich...
 

robinsbegin

Apfel der Erkenntnis
Registriert
20.10.09
Beiträge
727
Ein noch C# es ist wie Java nur irgendwie blöd :D - Aber das ist meine Meinung ^^

Vorteil eben an ObjC ist hingegen wenn du willst/musst kannst du Hardware nah programmieren, musst du aber nicht. Mit C# ist das nur bedingt möglich...

C# != Java || C# <> Java || ! 'C#'.equal('Java')

Das oben muss nicht alles Syntaxmaessig richtig sein.

Java ist Plattformunabhaengig, c# Bedingt mit viel aufwand. .Net war schon immer fuer Win gedacht. Java schon immer fuer mehr systeme.

Beide sind objektorientierte Sprachen. Ob ich nun ein leeres Objekt hab, egal. Der GC raeumt es doch eh auf oder? Der Programmierer sollte lieber sich Gedanken ueber Benutzerfreundlichkeit, datensicherheit, stabilitaet machen als ob da jetzt ein Objekt keine Referenz hat, etc.

Doch es ist klar, dass viele c Programmierer das anders sehen. Genauso wie der RPG Programmierer es mit seinen shortcuts sieht.
 

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
Beide sind objektorientierte Sprachen. Ob ich nun ein leeres Objekt hab, egal. Der GC raeumt es doch eh auf oder? Der Programmierer sollte lieber sich Gedanken ueber Benutzerfreundlichkeit, datensicherheit, stabilitaet machen als ob da jetzt ein Objekt keine Referenz hat, etc.

Also das stimmt schon dennoch hat man wenn man es will keine Kontrolle darüber wann aufgeräumt wird. Man kann zwar in Java dem GC sagen: "es wäre toll wenn du jetzt mal aufräumst" Aber das passiert eben wirklich nur wenn der GC es auch für nötig hält. Da weiß ich nicht wie genau das in C# ist.

Mit dem experimentellen GC für Java soll das aber möglich sein aber der hat für mich immernoch alpha Stadium.

Und da du von Benutzerfreundlochkeit und Java sprichst. Was ja immer weider bemägelt wird ist die Speicherauslastung von Java wogegen man nur bedingt wirken kann. Für Client Progrämmchen im speziellen kleinere Tools würde ich niemals Java nehmen weil es einfach zu resourcenfressend ist. Hingegn für Serveranwendungen oder wo es wirklich auf plattformunabhängigkeit ankommt schon.

Nur weil man jetzt mit Objekten hantiert sollte man nicht dne größten Scheiß programmieren und mal eben ohne darüber nachzudenken tausende Objekte erstellen ohne Zweck.

Wie bereits viele wissen: Jede sprache hat ihre Vorteile - Aber manche sind einfach nur zum kotzen (Delphi z.B.)

Andererseits weichen wir hier gerade ziemlich vom Thema ab ;)
 

robinsbegin

Apfel der Erkenntnis
Registriert
20.10.09
Beiträge
727
Das Thema sind Dinge, worueber sich Informatiker schon immer streiten. Java, c#, c, vb, etc. Jeder erkennt seine Sprache was wertvoll und verteidigungspflichtig an. Kannst du Java und machst damit Kohle, nimmst du mir c# Programmierer Arbeit weg. Also versucht man entweder jeden von c# abzuhalten oder jeden zu c# zu zwingen, damit ich Geld mache.

Bei Mac os bleibt dir diese Wahl nicht und daher ist es schon interessant, dass dem Te sein Freund davon abraet. Das i-tuepferlchen ist, dass er von der ms-Konkurrenz kommt :)
 

Pii

Rheinischer Krummstiel
Registriert
25.06.07
Beiträge
383
... kommt dieses Thema durch den Kommentar eines befreundeten Programmierers. Dieser hält C# für moderner. Als Argument wurde mir wie schon geschrieben die Speicherverwaltung und das Programmieren mit Zeigern genannt.
Ignoriere ihn. Der Kommentar ist völlig sinnfrei, denn:
* Das sind keine Argumente für/gegen "Modernität".
* Dafür gibt es auch keine objektiven Argumente.
* Das ist sachlich sowieso total irrelevant.

Eine Programmiersprache ist ein Werkzeug. Man wählt die geeignete Sprache anhand der Aufgabe. Und keine Sprache ist für alle Aufgaben gleich gut geeignet.

Also: Vergleiche das z.B. mit einem Hammer und einem Schraubenzieher, dann verstehst Du es.

Wen ich jetzt Objective-C richtig verstanden habe, muss ich nicht Zeigern arbeiten... Kann es aber. Ist das so richtig? Wegen der C Wurzeln.
Für einen Einsteiger ist diese Betrachtungsweise vorerst völlig ausreichend.

Dann aber eine Frage. Was ist denn an Zeigern gefährlich. Und das dann aber im Kontext zu Obective-C.
Ein Zeiger ist eine Variable die eine Speicheradresse enthält.

Antworten, prinzipiell:
* Ein (korrekter) Zeiger ist eigentlich nicht gefährlich.
* Die eigentliche Gefahrenquelle ist Zeigerarithmetik.

Antworten, bzgl. Objective-C:
* Bei Objective-C benutzt man Zeiger, aber ohne das es relevant ist.
* Bei Objective-C verwendet man nahezu keine Zeigerarithmetik.

Was muss ich hier gleich als Anfänger in dieses Sprache beachten.
Mach dir um Zeiger bei ObjC keinen Kopf.
 

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
Antworten, bzgl. Objective-C:
* Bei Objective-C benutzt man Zeiger, aber ohne das es relevant ist.
* Bei Objective-C verwendet man nahezu keine Zeigerarithmetik.


Mach dir um Zeiger bei ObjC keinen Kopf.

Prinzipiell stimm ich dir da zu. Jedoch finde ich das wenn man schon programmiert auch einmal etwas in richtung Zeigerarithmetik gemacht zu haben um dann zu entscheiden ob man weiterhin so programmieren möchte oder eben auf der sicheren Seite bleibt. Es gehört, finde ich, einfach dazu ;)
 

Pii

Rheinischer Krummstiel
Registriert
25.06.07
Beiträge
383
Prinzipiell stimm ich dir da zu. Jedoch finde ich das wenn man schon programmiert auch einmal etwas in richtung Zeigerarithmetik gemacht zu haben um dann zu entscheiden ob man weiterhin so programmieren möchte oder eben auf der sicheren Seite bleibt. Es gehört, finde ich, einfach dazu ;)
Ich erwarte von jemand der als Entwickler tätig ist, dass er das kleine 1x1 der Informatik beherrscht. Egal womit er arbeitet. Bei einem Hobbyisten ist das zwar empfehlenswert, aber in den meisten Fällen vernachlässigbar.
 

robinsbegin

Apfel der Erkenntnis
Registriert
20.10.09
Beiträge
727
Ich erwarte von jemand der als Entwickler tätig ist, dass er das kleine 1x1 der Informatik beherrscht. Egal womit er arbeitet. Bei einem Hobbyisten ist das zwar empfehlenswert, aber in den meisten Fällen vernachlässigbar.

Das kleine 1*1 der Informatik? Von klein der Informatik zu reden :)
 

msteffenma

Weigelts Zinszahler (Rotfranch)
Registriert
03.01.08
Beiträge
252
An Alle mal hier. Vielen Dank für eure Antworten. Gehe jetzt bedeutend relaxter an die Sache ran.

Habe mir die Video2Brain "Objective-2" Ausgabe gekauft und bin da seit gestern dran. Nur im C Abschnitt waren die Zeiger ein Thema.

Verstehe immer besser und werde jetzt mal eine kleine App. schreiben. Wird wahrscheinlich wieder im Chaos enden und die Nacht wird kurz sein.

Aber es macht sehr viel Spass am Mac zu programmieren.

Nur... Ist schon was anderes als für Excel VBA Funktionen zu schreiben.

Wünsche euch allen einen guten Rutsch ins neue Jahr.