2012-09-01 4 views
9

Nach dem Apple guideline, scheint es verwirrend, z. für Verfahren viewWithTagObjective C Konvention: Wann zu verwenden und wann zu verwenden Mit

In Java würde ich eine Methode

genannt haben
getViewByTag // Java version, equivalent to viewWithTag in Obj-C 

Aber ich fand auch gibt es einige Verfahren wie objectForKey, warum also nicht nur objectWithKey stattdessen verwenden?

getObjectByKey or just get // Java version, equivalent to objectForKey, 
          // but why not objectWithKey? Or not viewForKey above? 
+1

Schöne Frage, übrigens. Dies ist eine dieser Fragen, für die ich eine Antwort brauchte, aber nie nachfragen wollte. Ich frage mich selbst nicht einmal. – Mazyod

+0

Apple-Programmierer Fred verwendet immer "für" und Apple-Programmierer Jim immer "mit". –

Antwort

3

Aus meiner Beobachtung

Während der Einstellung/die Objekte bekommen, verwenden Sie MIT.

z.B. Zur Einstellung von NSMutableArray Objekt

- (id)initWithCapacity:(NSUInteger)numItems 

Während der Einstellung/getting die Eigenschaften für Objekte, verwenden Sie FÜR.

e.g.For Einstellung Wert für Eigenschaft des Typs NSMutableDictionary

- (void)setValue:(id)value forKey:(NSString *)key 

hoffe, das hilft Ihre Zweifel in Clearing

+0

leider sind die Methoden für 'NSDictionary'' objectForKey: '' setObject: forKey: ', das ist nicht in der Nähe von Objective-C-Eigenschaften. – Mazyod

3

Es ist wie with scheint für Eigenschaften verwendet, die direkt zu einem Objekt gehört. A UIView hat eine tag Eigenschaft so viewWithTag:14 könnte umformuliert werden als "Finden Sie die Ansicht, deren Tag-Eigenschaft ist 14".

Wenn Sie ein Objekt in ein Wörterbuch einfügen, das einem Schlüssel zugeordnet ist, ist dieser Schlüssel nicht unbedingt Teil des Objekts. objectForKey:@"foo" ist ein Weg, zu sagen „für ein Objekt suchen, die mit dem Schlüssel verknüpft ist‚foo‘.

+0

+1 so würde ich es beschreiben. 'with' bedeutet, dass der übergebene Wert eine Eigenschaft des Zielobjekts ist, während' for' bedeutet, dass der übergebene Wert dem Zielobjekt zugeordnet ist. –

5

ich es eigentlich denken, ist viel einfacher als das, was die meisten Antworten denken. Ich denke, es hat weniger mit komplexen Programmiersprache zu tun Besonderheiten und mehr zu tun mit der Einzigartigkeit des Objekts in Frage hat.

Wenn Sie viewWithTag: sagen, fragen Sie die UIView für jede Ansicht, die diesen Tag hat. Es gibt mehrere sein könnte. die UIView wird eine Rückkehr von

Ho wever, objectForKey: (für mich) klingt wie es sollte ein einzelnes Objekt (oder Null) mit diesem Schlüssel verbunden sein. Der Schlüssel existiert also und ist an ein einzelnes Objekt gebunden (eng gekoppelt).

EDIT:

Es gibt eine Antwort auf die Existenz von „durch“ zu erwähnen, die weiter impliziert, wie die Konvention nichts mit Programmiersprache Komplexität zu tun hat. Es ist nur natürliches Englisch.

NSString ‚s stringByAppendingString:, verwendet zum Beispiel durch, nur weil die Funktion mit einem Verb geschrieben anhängt. Du kannst nicht sagen mitAppending, das ist schlechtes Englisch.

+1

Ich wollte dieser Diskussion nur das Wort "Pluralität" anbieten.Es ist das eine Wort, das mir zuerst einfiel, und das Konzept, das in dieser Antwort (+1) erklärt wird. Soweit "durch" das Handeln bedeutet, impliziert das andere einfach eine Auswahl. –

+0

der neue Schnitt lehrt Menschen Grammatik und nicht-techy Zeug .. Wählen Sie einige [http://english.stackexchange.com/?as=1] Forum –

0

Die Apple-Richtlinien machen keinen Anspruch auf Verwendung für oder mit. Der Sinn der Codierungskonvention besteht darin, anzugeben, um welche Arten von Argumenten es sich handelt, und um Methodensignaturen zu schreiben, die natürlich klingen.

Der Grund für das for oder with im Methodenname ist, den Typ oder Zweck des ersten Parameters der Methode zu identifizieren, was ihm hilft, besser zu lesen.

Apple selbst verwendet mehrere Konventionen, aber das ist der grundlegende Zweck, es gibt kein konkretes richtig oder falsch versuchen Sie einfach, den ersten Parameter der Methode im Methodennamen mit entweder für oder mit zu identifizieren.

Und wie für Apple-Konventionen - Get (was auch immer) ist nicht einmal Teil der tatsächlichen Konventionen, so dass Sie fragen können, wann ich verwenden oder nicht.

Lesen Sie diese http://cocoadevcentral.com/articles/000082.php

auch vergessen Sie nicht (von) NSURL urlByAppendingPathComponent etc - ein Gefühl dafür bekommen, und man wird nicht schief gehen

0

Sie verwenden „mit“, wenn der Parameter im Eigentum oder Besitz werden, oder wird ein relativ permanentes Attribut durch das Objekt links vom Wort "mit" sein.

  • initWithCapacity/arrayWithCapacity - die Kapazität wird ein Attribut des Container-Objekt sein genannt zu werden und wird relativ dauerhaft sein (bis Sie Objekte, um es über die ursprüngliche Kapazität hinzufügen)

  • viewWithTag - geben einen Blick "Haben" des angegebenen "tag" -Attributs.

Während Sie „für“ bezeichnen, eine losere Verbindung zwischen dem „gewünschten“ Objekt und einem „Token“ Objekt verwenden, das Sie um es zu bekommen verwenden. - objectForKey/attributeForValue - normalerweise besitzt das "Objekt" nicht den Schlüssel. - documentForWindow - Das Fenster gehört dem Fenstercontroller und nicht dem Dokument. Darüber hinaus könnte es mehr als ein Fenster für jedes Dokument geben.

Aber für einen lockeren Assoziationen mehrerer Objekte des gleichen Typs innerhalb eines einzigen Call-Methode, ist es üblich, dass Sie etwas verwenden wie:

doSomethingForFoo:withThisOtherFoo:havingYetAnotherFoo: 

So ist der Auftrag für eine solche komplexe Anruf ist:

  1. für
  2. mit
  3. mit
Verwandte Themen