Frage

Gut, ich habe angefangen, mit iPod - /iPhone-Programmierung mit Kopf Erste iPhone Entwicklung (O ' Reilly) und ich Schreibe code aus dem Buch.Es gibt zwei Probleme, eines ist die Programmierung verwandt und die andere ist nicht.

  • Ich verstehe nicht das format von objective-c-Methoden.Ich bin immer ein paar Fehler, basierend auf Quell-code aus dem Buch.Das führt mich zu meiner nächsten Frage.

  • Einige der code fehlerhaft ist.Ich denke so, weil ich konnte nicht Holen Sie sich die code ausführen, ohne es zu ändern.Das Buch hat einige Rechtschreibfehler in den text, denn es ist eine erste Ausgabe und so weiter, aber konnte meine "Fixierung" der code zu tun mit es?

So... Wo kann ich erfahren Sie mehr über objective-c Methoden und wie Sie funktionieren, in Bezug auf die Struktur und wo der Rückgabetyp und die Argumente gehen?

Für diejenigen, die mit dem Buch, ich bin in der Mitte des InstaTweet app zu Beginn.

Vielen Dank.

War es hilfreich?

Lösung

Vielleicht ist ein Vergleich zwischen einem "c-like" Sprache und obj-c würde nützlich sein -- lassen Sie gehen mit Java.Stellen Sie sich eine Rechteck-Klasse mit einer Methode setBackgroundColor.Nehmen wir an, dass wir eine Instanz von Rechteck genannt rect.

In Java ist die Signatur der Methode wäre wahrscheinlich

public void setBackgroundColor(int r, int g, int b) { ... }

In Objective-C, Argumente sind Teil der Signatur der Methode, so könnte es sein

- (void)setBackgroundColorWithRed:(int)r green:(int)g blue:(int)b;

Die "-" bedeutet, dass es eine Instanz-Methode auf das Rechteck-Klasse.(void) ist die Methode Rückgabetyp.Dann kommen die Argumente.Jeder Doppelpunkt definiert ein argument, das typisiert (jedes arg (int) in diesem Beispiel).

Wir vergleichen Aufruf dieser Methoden.Java:

rect.setBackgroundColor(255, 255, 0);

Obj-c:

[rect setBackgroundColorWithRed:255 green:255 blue:0];

Viele Leute stolpern über obj-c-syntax-du bist nicht allein.Hoffentlich wird dieser Vergleich macht die Dinge klarer.Es steht auch für eine sprachliche Stärke von objective-c:bei Anruf Zeit, es ist klar, was Ihre Argumente sind.Wenn ich das Lesen von code und sah die Java-Methode aufgerufen wird, wäre es nicht offensichtlich, dass die Argumente sind rot, blau und grün.In obj-c, es ist schmerzlich klar, dass wir die Einstellung der einzelnen Farbwerte.Zugegeben, die meisten Entwickler können sich vorstellen, was die drei Argumente an eine Methode setColor werden, aber komplexere Methoden verwirrend.Hier ist eine komplexere Methode definiert, die in Java und objective-c:

static Dog createDog(  String name
                     , int age
                     , boolean isNeutered
                     , String ownerName
                    );
+ (Dog *)createDogNamed:(NSString *)name 
     age:     (int)        age 
     neutered:(BOOL)       isNeutered 
     owner:   (NSString *) owner;

Bei Aufruf Zeit:

Dog.createDog("Fluffy", 2, true, "Moshe");
[Dog createDogNamed:@"Fluffy" age:2 neutered:YES owner:@"Moshe"];

Objective-c ist Ausführlicher, aber sehr viel besser lesbar.In der Java-Beispiel, es ist nicht wirklich klar, was die "2" und "true" Argumente bedeuten.Objective-c fast liest wie Englisch.

Andere Leute haben links zu mehr in-depth-guides, aber ich hoffe, dies wird Sie an der syntaktischen Stolpersteine genug, um den links nützlich.Ich bin glücklich, Sie zu beantworten spezifischer Fragen, die Sie haben.In meiner Erfahrung -, obj-c Neulinge haben eine wirklich harte Zeit mit syntax, und dann ist es klicken Sie aufs und fühlt sich Brillant.Dort hängen!

Andere Tipps

Die Definition einer Objective-C-Methode ist ziemlich einfach. Es ist ziemlich ähnlich wie bei einer C-Funktionsaufruf Definition regelmäßig, eigentlich. Die große Zusätzlich ist die Möglichkeit, die Parameter zu benennen. Hier ein Beispiel:

-(int)addX:(int)x toY:(int)y
{
    return x + y;
}

Die Sie durch Senden einer Nachricht an das entsprechende Objekt verwenden können:

int z = [object addX:x toY:y];

In diesem Fall habe ich die Parameter gegeben und die Argumente, die gleichen Namen, um deutlich zu machen, wie die Dinge in einer Reihe aufstellen. Sie könnten genauso gut tun:

int z = [object addX:4 toY:7];

Und danach wird z 11 sein.

Sehen Sie sich Apples Einführung in Objective C .

Die grundlegende Methode Format ist

-(ReturnType *)methodName:(VariableType *)variableName{

}

Zum Beispiel:

-(NSString *)giveMeANewStringFromAnOldString:(NSString *)oldString{

}

Sie sollten auch auf der Website des Buches überprüfen die errata.

Ich tat das gleiche, was Sie getan haben. Ich hob den Kopf bis iPhone Entwicklung Buch zu hoch (für 3.1 SDK).

Ich lief durch alle die Tutorials in und fand nur einen Fehler, der meine Anwendung verursachte keine Arbeit (Ich habe eine Notiz in meinem Buch, aber ich kann es jetzt nicht mehr finden ...).

So nach, dass ich merkte, ich hatte genau das gleiche Problem, das Sie mit der Syntax aufweisen, sind.

Ich nahm "Programmieren in Objective-C 2.0" von Stephen G. Kochan. (Es ist einfach brillant.) Das Buch klar und prägnant ist. Ich habe noch nicht über 25% des Buches machen und alle meine Fragen wurden beantwortet.

Reading Objective-C-Code wirft mich seit Monaten, weil ich so auf eine andere Syntax verwendet habe, dass mein Gehirn ein wenig dauerte, während auf die Art und Weise Objective-C erwartet einzustellen.

Was ich finde, ist Objective-C-Code wirklich lesbar wird, sobald Sie Ihr Gehirn wickeln um ihn herum. Carl Norum dem Beispiel oben ist eine große Demonstration der Lesbarkeit.

[object addX:4 toY:7];

Es wird nicht viel besser lesbar als das!

Auch einige Terminologie ein bisschen anders. „Messaging ein Objekt“ vs für ein paar Wochen zu warf mir „Aufruf einer Methode“.

Ich hoffe, das Buch Empfehlung hilft Ihnen, es half mir wirklich viel.

Es gibt einige große Lernressourcen von Apple:

Lernen Objective-C: A Primer

und

Coding Richtlinien für Cocoa

Good Luck!

Lesen Sie Cocoa (R) Programming for Mac (R) OS X (3rd Edition) , es ist die Bibel für Mac und Kakao.

Ich habe keine Probleme mit ihm hatte, aber im Kopf behalten, dass die API immer bewegen sich nach vorne, so könnte es geringfügige Updates / Änderungen sein. Aber ich habe nichts gefunden, das mir alle die Codebeispiele und Übungen aus dem Finish aufhören würde.

Dies ist das Buch zu lesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top