¿Cuál es el valor predeterminado de una variable BOOL
en Objective-C?Valor predeterminado de BOOL
Respuesta
No es ningún valor por defecto si se escribe
-(void)somemethod {
BOOL x; // <--- no default value
Se inicializa a la basura.
Sin embargo, para una IvarBOOL
, se inicializa a NO
, como a toda la instancia está lleno de 0 en la inicialización.
(Nota:.. Cuando se activa ARC, locales punteros a objetos serán siempre tienen un valor por defecto nil
, pero las variables locales de tipo no-objeto como BOOL todavía se inicializan a la basura Ver Local variables set to nil? (Objective-C))
Hice algunos experimentos propios usando Xcode 5.1, OS X Mavericks 10.9.4. Para aquellos que no saben, ALog es un NSLog modificado. De todos modos, el primer experimento fue utilizar isLandscape
como una variable pública, con @synthesize
, para acceder al controlador de vista principal (se muestra a continuación). El segundo experimento no usó @synthesize
y, obviamente, usé self.isLandscape
para obtener el mismo resultado en la consola. La salida de la consola está debajo de mi código. El tercer experimento usó 'isLandscape' como una variable local dentro de un método.
@interface MyClass : UIView // (subclass used in my UIViewController)
…
@property (nonatomic) BOOL isLandscape; // < - - - testing this BOOL
…
@implementation MyClass
…
@synthesize isLandscape;
- (void)awakeFromNib
{
[super awakeFromNib];
// Test for YES or NO
if (isLandscape == YES) {
ALog(@"isLandscape == YES");
} else if (isLandscape == NO) {
ALog(@"isLandscape == NO");
} else {
ALog(@"isLandscape != YES/NO");
}
// Test for nil or non-nil
if (isLandscape) {
ALog(@"isLandscape");
} else if (!isLandscape) {
ALog(@"!isLandscape");
} else {
ALog(@"!= nil/non-nil");
}
// Test its value
ALog(@"isLandscape == %d", isLandscape);
}
Estos resultados son de los dos primeros experimentos ...
2014-08-28 08:18:52.909 MyApp[493:60b] -[MyClass awakeFromNib] [Line 157] isLandscape == NO
2014-08-28 08:18:52.911 MyApp[493:60b] -[MyClass awakeFromNib] [Line 166] !isLandscape
2014-08-28 08:18:52.912 MyApp[493:60b] -[MyClass awakeFromNib] [Line 172] isLandscape == 0
En el tercer experimento ‘isLandscape’ ya no era una propiedad. Me puse a ser una variable local con resultados interesantes:
- (void)awakeFromNib
{
[super awakeFromNib];
BOOL isLandscape; // < - - - testing this BOOL
// Test for YES or NO
if (isLandscape == YES) {
ALog(@"isLandscape == YES");
} else if (isLandscape == NO) {
ALog(@"isLandscape == NO");
} else {
ALog(@"isLandscape != YES/NO");
}
// Test for nil or non-nil
if (isLandscape) {
ALog(@"isLandscape");
} else if (!isLandscape) {
ALog(@"!isLandscape");
} else {
ALog(@"!= nil/non-nil");
}
// Test its value
ALog(@"isLandscape == %d", isLandscape);
}
Estos resultados son del tercer experimento ...
2014-08-28 08:28:33.483 MyApp[581:60b] -[MyClass awakeFromNib] [Line 159] isLandscape != YES/NO
2014-08-28 08:28:33.486 MyApp[581:60b] -[MyClass awakeFromNib] [Line 164] isLandscape
2014-08-28 08:28:33.487 MyApp[581:60b] -[MyClass awakeFromNib] [Line 172] isLandscape == -24
supongo propiedades inicializadas por mí o Xcode de forma automática, pero las variables locales no obtener valores en absoluto. Aun así, observe que la [línea 164] variable local no es SÍ o NO, pero no es nula. Supongo que es el valor de basura (al azar) con el que no puede contar. Espero que esto ayude a la próxima persona. Aprendí algo, pero espero con interés los comentarios. ¡Gracias y buena suerte!
- 1. Valor predeterminado para bool en C#
- 2. Valor predeterminado para bool en C++
- 3. BOOL envoltura? Haz un objeto de valor 'BOOL'. (Objetivo-C)
- 4. DataContract, valor predeterminado de DataMember
- 5. SQLite insertando el valor bool
- 6. operador de mapa [] y bool como valor
- 7. bool valor de una lista en Python
- 8. valor predeterminado de una propiedad estática
- 9. Establecer un valor predeterminado para una propiedad
- 10. Datos básicos NSPredicar comprobando el valor BOOL
- 11. scipy.sparse valor predeterminado
- 12. Html.EditorFor Establecer valor predeterminado
- 13. valor genérico predeterminado
- 14. Hibernate valor predeterminado hbm2ddl.auto
- 15. Yii DROPDOWNLIST valor predeterminado
- 16. DropdownListPara el valor predeterminado
- 17. RingtonePreference valor predeterminado
- 18. valor predeterminado del puntero.
- 19. Android CheckBoxPreference Valor predeterminado
- 20. valor predeterminado Tipo de recopilación
- 21. Valor de atributo predeterminado JAXB
- 22. Valor predeterminado de ComboBox FXML
- 23. Archivo de encabezado de valor predeterminado del constructor C++
- 24. f Demostrando (f bool) = bool
- 25. Establecer el valor predeterminado de la matriz dinámica
- 26. C# Inicialización de matriz - con valor no predeterminado
- 27. combobox valor predeterminado winforms C#
- 28. bash asignar el valor predeterminado
- 29. Android - valor predeterminado en editText
- 30. Constructor Python y valor predeterminado
¿Puede contar con que el non ivar BOOL siempre será la misma basura? o es diferente? (es decir, lo veo evaluar el valor entero de '2' en una declaración de NSlog) – bentford
@ bentford: No, no puedes. – kennytm
@bentford El ivar se inicializa en 'NO' como se mencionó anteriormente. Creo que te refieres a var. –