2012-09-01 10 views
9

De acuerdo con Apple guideline, parece ser confuso, p. Ej. para el método viewWithTagConvenio de Objective C: Cuándo usar Para y cuándo usar Con

En Java, me gustaría contar con un método llamado

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

Pero también encontró que hay algún método como objectForKey, ¿por qué no sólo tiene que utilizar objectWithKey en su lugar?

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

Buena pregunta, por cierto. Esta es una de esas preguntas para las que necesitaba una respuesta, pero nunca pensé en preguntar. Ni siquiera me pregunto, para el caso. – Mazyod

+0

El programador de Apple Fred siempre usaba "para" y el programador de Apple Jim siempre usaba "con". –

Respuesta

3

Desde mi punto de

Durante el ajuste/conseguir los objetos, se utiliza CON.

p. Ej. Para el ajuste del objeto NSMutableArray

- (id)initWithCapacity:(NSUInteger)numItems 

Durante el ajuste/obtener las propiedades de los objetos, se utiliza PARA.

valor de ajuste e.g.For de propiedad de tipo NSMutableDictionary

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

Esperanza esto ayuda en la limpieza de tu duda

+0

desafortunadamente, los métodos para 'NSDictionary' son' objectForKey: '' setObject: forKey: ', que no está cerca de las propiedades de Objective-C. – Mazyod

3

Parece que with se utiliza para las propiedades que pertenecen directamente a un objeto. Un UIView tiene una propiedad tag, por lo que viewWithTag:14 podría reformularse como "Buscar la vista cuya propiedad de etiqueta es 14".

Cuando coloca un objeto en un diccionario, asociado a una tecla, esta clave no es necesariamente parte del objeto en sí. objectForKey:@"foo" es una manera de decir "Mira para un objeto que está vinculado a la clave 'foo'.

+0

+1 así es como lo describiría. 'con' significa que el valor pasado es una propiedad del objeto objetivo, mientras que' for' significa que el valor pasado está asociado de manera circunstancial con el objeto objetivo. –

5

De hecho, creo que es mucho más simple que lo que la mayoría de las respuestas piensan. Creo que tiene menos que ver con el lenguaje de programación compleja específicos, y tiene más que ver con la singularidad del objeto en cuestión.

Cuando dice viewWithTag:, que están pidiendo la UIView para cualquier vista que tiene esa etiqueta. puede haber varios. el UIView de devolver uno de 'em.

Ho wever, objectForKey: (para mí) suena como si hubiera un solo objeto (o nulo) asociado con esa clave. Entonces, la clave existe y está ligada (estrechamente unida) a un solo objeto.

EDIT:

Hay una respuesta mencionar la existencia de "por", lo que implica además cómo la convención no tiene nada que ver con la complejidad del lenguaje de programación. Es solo inglés natural.

NSString 's stringByAppendingString:, por ejemplo, utiliza por, sólo porque la función se escribe con un verbo añadiendo . No puedes decir conAppending, eso es mal inglés.

+1

Solo quería ofrecer la palabra "pluralidad" a esta discusión.Es la única palabra que primero se me ocurrió, y el concepto explicado en esta respuesta (+1). En cuanto a "por", eso implica acción, el otro simplemente implica una selección. –

+0

la nueva edición enseña gramática de personas y cosas que no son de Techy ... elija algún foro [other] (http://english.stackexchange.com/?as=1) –

0

Las directrices de Apple no hacen ninguna afirmación sobre cuándo usar para o con. El objetivo de la convención de codificación es indicar cuáles pueden ser los tipos de argumentos y escribir firmas de métodos que son naturales.

El motivo de la o para en el nombre del método es identificar el tipo o el propósito del primer parámetro para el método, lo que ayuda a leer mejor.

Apple utiliza varias convenciones, pero ese es el propósito básico, no existe un bien concreto o incorrecto simplemente intente identificar el primer parámetro del método en el nombre del método con o para.

Y en cuanto a las convenciones de Apple: obtener (lo que sea) ni siquiera es parte de las convenciones actuales, por lo que podría preguntar cuándo lo uso o no.

Leer este http://cocoadevcentral.com/articles/000082.php

también no se olvide (por) NSURL urlByAppendingPathComponent etc - tener una idea de ella y que no puede errar

0

Se utiliza "con" cada vez que el parámetro es propiedad o está siendo propiedad, o será un atributo relativamente permanente por el objeto a la izquierda de la palabra "con".

  • initWithCapacity/arrayWithCapacity - la capacidad será un atributo del objeto contenedor de ser llamado y será relativamente permanente (hasta que se agrega objetos a ella más allá de la capacidad inicial)

  • viewWithTag - devolver un punto de vista "tener" el atributo "etiqueta" especificado.

Mientras se utiliza "para" para denotar una asociación entre el objeto más flojo "deseado" y un objeto "token" que se utiliza para llegar a ella. - objectForKey/attributeForValue - generalmente el "objeto" no posee la clave. - documentForWindow - la ventana es propiedad del controlador de ventana y no del documento. Además, podría haber más de una ventana para cada documento.

Sin embargo, para las asociaciones más laxas de múltiples objetos del mismo tipo dentro de una única llamada al método, es costumbre que utilice algo como:

doSomethingForFoo:withThisOtherFoo:havingYetAnotherFoo: 

Así el orden de dicha convocatoria de complejo es:

  1. para
  2. con
  3. tener
Cuestiones relacionadas