1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Frage zu Objective-C Tuturial

Dieses Thema im Forum "OS X-Developer" wurde erstellt von flo911, 25.03.08.

  1. flo911

    flo911 Roter Delicious

    Dabei seit:
    02.12.06
    Beiträge:
    93
    Hallo,
    Ich will Objective-C lernen und habe mir deshalb folgendes Tutorial durchgelesen. Zu Kapitel 12 hätte ich eine Frage, vielleicht kann mir hier jemand weiterhelfen:
    Ich hab das so verstanden, dass favoriteComputer eine Pointer Variable ist, in der die Adresse eines Strings gespeichert ist. In der Zeile 2.2 wird jetzt favoriteComputer der Wert Mac zugewiesen, warum wird jetzt der String verändert auf den die Pointer Variable zeigt und nicht die Adresse die in der Variable gespeichert ist?
    Im Kapitel davor wurden Pointer behandelt und dort steht das man um den Wert zu verändern, auf den eine Pointer Variable zeigt einen * vor dem Variablennamen setzten muss.
    Gruß Flo
     
  2. Calanda

    Calanda Tokyo Rose

    Dabei seit:
    04.03.08
    Beiträge:
    69
    Ich bin zwar auch noch Anfänger in Objective-C aber ich meine die Zuweisung müsste

    lauten.
     
    #2 Calanda, 25.03.08
    Zuletzt bearbeitet: 25.03.08
  3. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    In der Tat. Nein, muss sie nicht ;)

    Du weist einem Pointer einen anderen Pointer zu.

    Alex
     
  4. Calanda

    Calanda Tokyo Rose

    Dabei seit:
    04.03.08
    Beiträge:
    69
    @below: Stimmt, das glaub ich dir sogar ;) Ich habe noch ein wenig gesucht und gelesen und festgestellt, dass es tatsächlich den Stern nicht braucht. Nun aber frage ich mich wieso das so ist. In C sieht es ja wie oben beschrieben so aus:
    Ich nehme an in Objective-C hat es mit dem Objekt NSString zu tun. Habe ich beispielsweise folgendes
    funktioniert das einwandfrei. Irgendwie fehlt mir da jetzt der Hintergrund. Das @ zeigt ja scheinbar den Anfang von NSString an. Aber ich habe diesbezüglich keine Informationen gefunden wieso und weshalb. Ich habe das Buch "Objective-C und Cocoa" aber auch da geht es nicht so tief ins Detail und Google hat auch nicht wirklich weitergeholfen.
     
  5. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Also, die erste Zeile deklariert einen Pointer meinText. Dieser Pointer zeigt an der Stelle noch irgendwo hin, enthält also noch keinerlei nützliche Information. In der zweiten Zeile wird dem Pointer meinText die Adresse des NSString-Objekt @"Hallo Welt!" zugewiesen. Die Syntax @"..." wird vom Compiler in ein NSString-Objekt übersetzt und im Programmcode gespeichert. Wenn das Programm geladen wird, wird auch dieses NSString-Objekt in den Speicher geladen und die Speicheradresse, wo das NSString-Objekt dann liegt, wird dem Pointer meinText dann zu Laufzeit zugewiesen.

    MacApple
     
  6. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    Wie bereits erwähnt, ist das @"Mac!" ein Pointer auf ein String-Objekt mit dem Text "Mac!". Du weist also der Pointervariablen einen Pointer auf ein String-Objekt zu. In Objective-C gibt es genau 0 Möglichkeiten, unmittelbar mit einem Objekt zu arbeiten. Man kann immer nur mit Pointern (besser: IDs) von Objekten arbeiten.

    Noch eine andere Anmerkung. Das NSLog()
    Code:
    NSLog( favoriteComputer )
    ist mindestns gefährlich, wie man leicht bei einer Programmänderung belegen kann:
    Code:
    favoriteComputer = @"Computer: %@ OS: %@ Version %d.%d";
    NSLog( favoriteComputer );
    Wenn man wirklich einen Text ausgeben will, so sollte man diesen in einem Formatstring platzieren:
    Code:
    NSLog( @"%@", favoriteComputer );
    Das führt im Fehlerfalle nur zu seltsamen Ausgaben und nicht gleich zur Explosion des Rechners.
     

Diese Seite empfehlen