iphone - puedo - ¿Qué hace @synthesize window=_window do?
pasar fotos de iphone a pc windows 10 (3)
Entiendo esa @synthesize window;
combinado con @property
''auto-crea'' tus setters y getters, pero no estoy seguro exactamente qué pasa cuando asignas un valor como
@synthesize searchBar = _searchBar;
¿Esto significa que simplemente puedo usar _searchBar en lugar de decir self.searchBar en mis métodos?
Es para evitar un choque de nombres ivar por ejemplo con este método delegado:
- (void) searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
¿Es el equivalente de self.searchBar
lugar de searchBar
o son esos dos idénticos de todos modos?
La sintaxis se describe en la documentación - ver Directivas de implementación de propiedades .
La razón para cambiar el nombre de la variable de instancia es precisamente para desalentar el acceso directo. Un subrayado es utilizado por la convención. (Nota: Aunque las Pautas de codificación actualmente advierten contra el uso de un guión bajo, este consejo está desactualizado).
Nuevamente, según la documentación (consulte Uso de métodos de acceso), además de los métodos init y dealloc, siempre debe usar métodos de acceso. Utiliza los accesos establecidos para garantizar que usted administre la memoria correctamente y que emita las notificaciones de cambio de KVO, si corresponde. Utiliza los accessors para garantizar que la propiedad esté correctamente inicializada. Hay varios lugares comunes donde las propiedades se inicializan perezosamente; si no usas el acceso, obtienes nada ...
Un ejemplo de acceso directo: utilizando una de las plantillas de Datos centrales, si usó:
NSFetchRequest *request = ...;
NSError *error = nil;
NSArray *results = [__managedObjectContext executeFetchRequest:request error:&error];
en lugar de
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];
luego, debido a que el contexto del objeto administrado se crea de forma diferida en el método de acceso, es posible que termine enviando un mensaje a cero y sin obtener resultados.
Sus propiedades casi siempre tienen una variable de respaldo. Qué
@synthesize searchBar = _searchBar;
does declara que la variable de respaldo para su barra de búsqueda se llamará _searchBar
. Esto le permite desacoplar el nombre de la propiedad del nombre de su variable. De hecho, si no usa @synthesize
, no necesita tener una variable de respaldo en absoluto.
En cuanto a por qué las personas hacen esto, todos tienen diferentes motivos. Personalmente, lo hago para
- evitar enfrentamientos con nombres variables y
- dejar en claro cuando estoy usando una variable local y cuando estoy usando una variable de instancia.
@synthesize searchBar = _searchBar;
dice hacer un método getter llamado "searchBar" (etc.) para la variable de instancia _searchBar.
El guión bajo en la variable _searchBar generalmente significa "No accedas a mí directamente a menos que realmente sepas lo que estás haciendo. ¡Por el contrario, usa los métodos getter y setter!".