2010-10-01 9 views
27

He estado enseñando Objective-C durante aproximadamente 6 meses y me gusta mucho usar el lenguaje. Sin embargo, no he encontrado ningún buen estándar de codificación, por lo que el código que escribo siempre termina pareciendo un desastre incoherente.Objective-C Coding Standards?

Cosas como las convenciones de nomenclatura se llevan bien, pero el espaciado, la sangría y el (imposible) ancho de línea de 80 caracteres no funcionan tan bien.

¿Qué convenciones usas con Objective-C?

Aquí es un pequeño ejemplo de algo que no está funcionando:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { 

     self.navigationItem.leftBarButtonItem = 
     [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel 
                 target:self.parentViewController 
                 action:@selector(done:)] autorelease]; 

     NSString* units = [[NSString alloc] initWithFormat:@"%@", @"oz"]; 
     NSString* optionOne = [[NSString alloc] initWithFormat:@"[%d%@] Calculate", 100, units]; 

     self.options = [[NSMutableArray alloc] initWithObjects: 
         optionOne, 
         @"Configure Portions", 
         @"Configure Notifications", 
         @"Help", 
         nil]; 

     [units release]; 
     [optionOne release]; 
     [tableView reloadData]; 
    } 
    return self; 
} 
+0

https: // github.com/raywenderlich/objective-c-style-guide # language – thesummersign

Respuesta

7

Gran pregunta, gracias por preguntar.

Algunos de mis estándares de codificación personales:

  1. que no se adhieren a 80 caracteres, pero trato de mantenerse por debajo de 120 o menos. Obj-C es un lenguaje prolijo con argumentos "nombrados", y Cocoa es un marco incluso más wordier. Rara vez necesito editar el código en un VT220.
  2. No suelo dividir llamadas de método largas con la ":" alineada verticalmente como Xcode quiere que hagas. Yo prefiero el tradicional recto, con líneas envueltas cuando sea necesario, sangrado por un tabulador.
  3. Cuando esto se vuelve realmente difícil de manejar, divido la creación y el uso de objetos en múltiples líneas. P.ej. en lo anterior, probablemente crearía la matriz de opciones en una línea, y hago [self setOptions:...] en la siguiente. Esto simplifica la depuración de todos modos.
  4. No uso notación de puntos para el acceso a la propiedad, ya que me parece que oculta el comportamiento. Uso la notación tradicional [object property].
  5. Nunca he resuelto satisfactoriamente el nombramiento de ivars vs. locales. Xcode los colorea de forma diferente, lo que generalmente es todo lo que necesito, pero el tipo de MSFT que está en mi interior todavía piensa que el prefijo de alcance de la instancia es útil, p. m_ o al menos _. Pero generalmente no lo hago, porque es feo mirarlo. Y Dios sabe que la gente de Apple odia las cosas feas. :)

(Por si sirve de algo, en su ejemplo anterior, se puede obtener una cadena de autoreleased directamente usando -[NSString stringWithFormat:...] en lugar del alloc/init/liberación.)

+3

+1. Sigo más o menos las mismas pautas, y tampoco soy demasiado aficionado a [la notación Eastern Polish Christmas Tree] (http://www.kuro5hin.org/story/2004/6/1/43942/41236). – dreamlax

+1

@dreamlax: +1 para ese nombre de notación. –

+0

Más allá de estas excelentes sugerencias, también utilizo toda la información que obtengo cuando dejo que Xcode vuelva a indentificar todo el archivo. La sangría manual es una pérdida de tiempo y, afortunadamente, Xcode hace un trabajo generalmente decente. – bbum

1

Ésta es otra buena fuente: (soy nuevo para que no me deja publicar dos eslabones de la misma respuesta) http://cocoadevcentral.com/articles/000082.php (Cacao Estilo de Obj C parte 1 de 2)

parte 2 es el mismo enlace pero termina en 000083.php

2

Esta es probablemente la opinión discrepante por aquí, pero ... No doblo líneas en absoluto, enciendo word-wrap. La ventaja de esto es que puede reducir/estirar las ventanas y el código siempre se ve bien, además no tiene que perder el tiempo jugando con nuevas líneas y pestañas/espacios tratando de hacer que su código parezca aceptable.

+0

Esto es exactamente lo que hago. –

Cuestiones relacionadas