2011-04-07 20 views
11

Duplicar posible:
How does an underscore in front of a variable in a cocoa objective-c class work?¿Prefijo de subrayado en el nombre de la propiedad?

Puede alguien me punto a una explicación del uso de guiones, siempre he asumido que se utilizan para destacar que está accediendo a la Ivar [_window release]; en lugar de acceder al iVar a través de un método setter/getter [[self window] release]; o [self.window release]; Solo quiero verificar que mi comprensión es correcta.

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UILabel *markerLabel; 

@synthesize window = _window; 
@synthesize markerLabel = _markerLabel; 
+0

Para eso los uso. –

+0

Esto solía apuntar a este otro estafador aquí, que también es interesante http://stackoverflow.com/questions/3521254/prefixing-property-names-with-un-underscore-in-objective-c –

Respuesta

0

Es una convención, y su comprensión suena bien.

Otro mérito de esta convención es que no se puede acceder accidentalmente a los Ivar sin utilizar el organismo, debido a

view = viewController.view ; // usually bad 

no se compilará si el Ivar es _view en lugar de view.

Por lo general, no declaro el ivar, y solo uso @property y @synthesize. Sin un ivar explícito declarado, el compilador (al menos uno reciente) genera automáticamente el ivar (con el mismo nombre). Por lo tanto, el código anterior se compila sin problemas, y no sirve como protección contra no usar el colocador, pero usted puede eliminar una línea de código ... que podría ser algo malo para apuntar y no se lo recomiendo: p

10

El uso de un guión bajo para los nombres de ivar es una convención utilizada por primera vez por Apple para diferenciar entre un ivar real y una propiedad. Muchas personas desde entonces han adoptado esta convención.

La razón de hacer esto es para evitar el error de asignar un nuevo valor a una Ivar en lugar de a la incubadora real:

myIvar = newValue; 

en lugar de

self.myIvar = myValue; 

Si utiliza accidentalmente Por ejemplo, podría causar una pérdida de memoria. El guión bajo te evita cometer ese error.

+2

¿Realmente lo usaba? ¿Manzana? En cualquier caso, Apple no usa esta convención. No se menciona en las Pautas de codificación del cacao ni se usa en el código propio de Apple, por ejemplo: http://developer.apple.com/library/mac/#samplecode/TreeView/Listings/TreeViewDemo_View_TreeView_h.html#//apple_ref/doc/ uid/DTS40010131-TreeViewDemo_View_TreeView_h-DontLinkElementID_19 El guión bajo no le impide cometer el error de utilizar la propiedad donde pretendía utilizar la variable de instancia. – LearnCocos2D

Cuestiones relacionadas