Ich bin ein neuer iPhone / Objective-C-Entwickler und da ich verschiedene Tutorials und Open-Source-Code durchführe, habe ich ein kleines Problem damit, zu verstehen, wann ich die eckigen Klammern "[]" und wann verwenden soll Verwenden Sie den Punkt "." für den Zugriff auf Eigenschaften / Methoden eines Objekts.
Zum Beispiel dieser Code:
%Vor% Warum erhält [UIColor clearColor]
Klammern, aber todoTextLabel.backgroundColor
erhält die Periode?
Könnte mir jemand das leicht erklären?
Die Konvention, die ich im neuen Code gesehen habe, ist die Verwendung des Punkts für Eigenschaften und immer eckige Klammern für Nachrichten / Selektoren (was Sie Methoden nennen). Der Punkt wurde in Objective-C 2.0 eingeführt, so dass die Uneinigkeit der Informationen, die Sie online finden, nicht völlig unerwartet ist.
Es ist auch durchaus möglich, eckige Klammern für alles zu verwenden ( und ich ):
%Vor%entspricht
%Vor%Um zu wiederholen, sollten Sie den Punkt nicht für Nachrichten, sondern nur für Eigenschaften verwenden.
Um Ihre spezifische Frage zu beantworten, gehört [UIColor clearColor]
in Klammern, da es keine Eigenschaft ist; es ist tatsächlich eine Klassennachricht an UIColor
( +(UIColor)clearColor
).
Sie klingen, als kämen Sie aus einer Java-Welt, also könnte dies hilfreich sein:
%Vor%Die Meldungen "setXXX" und "XXX" stammen aus synthetisierten dynamischen Eigenschaften und sind ein Objective-C-Idiom. Der "Punkt" ist einfach eine Abkürzung für den Aufruf dieser Methoden und ist ungefähr gleichwertig.
BEARBEITEN: Jetzt, da ich ein paar Upvotes habe, ist es Zeit, dass einige von euch das überdenken:
Ich benutze nie Punkte, und Sie sollten auch nicht.
Ich verwende Punktnotation für Eigenschaften, weil
%Vor%ist etwas leichter zu lesen als
%Vor%Im zweiten Fall wird die Lesbarkeit unterbrochen, indem das Gehirn in den Nachrichtensendemodus versetzt wird, während im ersten Fall klar ist, dass Sie auf die Personeneigenschaft des Gruppenobjekts zugreifen.
Ich werde es auch beim Ändern einer Sammlung verwenden, zum Beispiel:
%Vor%ist etwas lesbarer als
%Vor%Die Hervorhebung in diesem Fall sollte in der Aktion des Hinzufügens eines Objekts zu dem Array sein, anstatt zwei Nachrichten zu verketten.
Die Konvention, die ich im neuen Code gesehen habe, ist die Verwendung des Punkts für Eigenschaften und immer eckige Klammern für Nachrichten / Selektoren (was Sie Methoden nennen). Der Punkt wurde in Objective-C 2.0 eingeführt, so dass die Uneinigkeit der Informationen, die Sie online finden, nicht völlig unerwartet ist.
Es ist auch durchaus möglich, eckige Klammern für alles zu verwenden ( und ich ):
%Vor%entspricht
%Vor%Um zu wiederholen, sollten Sie den Punkt nicht für Nachrichten, sondern nur für Eigenschaften verwenden.
Um Ihre spezifische Frage zu beantworten, gehört %code% in Klammern, da es keine Eigenschaft ist; es ist tatsächlich eine Klassennachricht an %code% ( %code% ).
Sie klingen, als kämen Sie aus einer Java-Welt, also könnte dies hilfreich sein:
%Vor%Die Meldungen "setXXX" und "XXX" stammen aus synthetisierten dynamischen Eigenschaften und sind ein Objective-C-Idiom. Der "Punkt" ist einfach eine Abkürzung für den Aufruf dieser Methoden und ist ungefähr gleichwertig.
BEARBEITEN: Jetzt, da ich ein paar Upvotes habe, ist es Zeit, dass einige von euch das überdenken:
Ich benutze nie Punkte, und Sie sollten auch nicht.
Ja, ich habe gerade angefangen, das auch zu lernen:
Im Gegensatz zu anderen Sprachen ist die Syntax zum Aufrufen einer Methode für ein Objekt nicht objName.someMethod ();
Es ist [objName someMethod]
Der Punktoperator wird verwendet, um den Wert einer Eigenschaft in einer Klasse abzurufen oder festzulegen. Es ist ein kurzer Weg, etwas zu tun.
Der Punktoperator, wie ich ihn gesehen habe, wird immer für eine Instanz eines Objekts verwendet, während [...] entweder für eine Instanz eines Objekts oder statisch (unter Verwendung des Klassennamens) verwendet werden kann.
todoTextLabel kann das [] auch verwenden, aber mit dem Punktoperator ist nur eine kürzere Hand ... sonst müssten Sie Parameter usw. angeben, und das ist nur eine längere Notation.
Ich hoffe, das hat geholfen.
Nach der (starken) Konvention werden Eigenschaftenaccessoren als Methoden geschrieben, die nach der Instanzvariablen für den Getter und dem Namen der (in Großbuchstaben geschriebenen) Instanzvariablen mit dem Präfix "set" für den Setter benannt sind (also beispielsweise die Variable foo, die Sie haben) foo und setFoo).
Wie andere bereits darauf hingewiesen haben, wird ab Objective-C 2.0, wenn Sie object.foo schreiben, auf den Methodenaufruf [object foo] beim Abrufen oder auf [object setFoo: arg] zum Festlegen abbilden. Sie können jedes Formular verwenden, und einige Leute bevorzugen weiterhin die vollständige Methoden-Syntax, selbst wenn Sie ausschließlich Objective-C 2.0 verwenden.
Eine separate, aber verwandte Ergänzung zu Objective-C 2.0 sind die @ property / @ synthesize / @ dynamic-Schlüsselwörter zum Generieren der Getter und Setter. Sie können diese mit Punktnotation mischen und abgleichen - die eine benötigt die andere nicht.
Ich bin ein neuer iPhone / Objective-C-Entwickler und da ich verschiedene Tutorials und Open-Source-Code durchführe, habe ich ein kleines Problem damit, zu verstehen, wann ich die eckigen Klammern "[]" und wann verwenden soll Verwenden Sie den Punkt "." für den Zugriff auf Eigenschaften / Methoden eines Objekts.
Zum Beispiel dieser Code:
%Vor%Warum erhält %code% Klammern, aber %code% erhält die Periode?
Könnte mir jemand das leicht erklären?
Big Nerd Ranch hat einige Gedanken zur Punktnotation, die es wert sind, gelesen zu werden.
Es gibt auch eine Widerlegung .
Big Nerd Ranch hat einige Gedanken zur Punktnotation, die es wert sind, gelesen zu werden.
Es gibt auch eine Widerlegung .
Nach der (starken) Konvention werden Eigenschaftenaccessoren als Methoden geschrieben, die nach der Instanzvariablen für den Getter und dem Namen der (in Großbuchstaben geschriebenen) Instanzvariablen mit dem Präfix "set" für den Setter benannt sind (also beispielsweise die Variable foo, die Sie haben) foo und setFoo).
Wie andere bereits darauf hingewiesen haben, wird ab Objective-C 2.0, wenn Sie object.foo schreiben, auf den Methodenaufruf [object foo] beim Abrufen oder auf [object setFoo: arg] zum Festlegen abbilden. Sie können jedes Formular verwenden, und einige Leute bevorzugen weiterhin die vollständige Methoden-Syntax, selbst wenn Sie ausschließlich Objective-C 2.0 verwenden.
Eine separate, aber verwandte Ergänzung zu Objective-C 2.0 sind die @ property / @ synthesize / @ dynamic-Schlüsselwörter zum Generieren der Getter und Setter. Sie können diese mit Punktnotation mischen und abgleichen - die eine benötigt die andere nicht.
Ja, ich habe gerade angefangen, das auch zu lernen:
Im Gegensatz zu anderen Sprachen ist die Syntax zum Aufrufen einer Methode für ein Objekt nicht objName.someMethod ();
Es ist [objName someMethod]
Der Punktoperator wird verwendet, um den Wert einer Eigenschaft in einer Klasse abzurufen oder festzulegen. Es ist ein kurzer Weg, etwas zu tun.
Der Punktoperator, wie ich ihn gesehen habe, wird immer für eine Instanz eines Objekts verwendet, während [...] entweder für eine Instanz eines Objekts oder statisch (unter Verwendung des Klassennamens) verwendet werden kann.
todoTextLabel kann das [] auch verwenden, aber mit dem Punktoperator ist nur eine kürzere Hand ... sonst müssten Sie Parameter usw. angeben, und das ist nur eine längere Notation.
Ich hoffe, das hat geholfen.
Tags und Links objective-c