Necesito crear una variable de instancia de tipo BOOL
con un valor predeterminado de False
en una de mis clases Objective-C. ¿Cómo hago esto? He visto personas que lo definen en su archivo .h pero realmente no necesito que esta variable sea pública. Por lo tanto, ¿no debería ponerlo en mi archivo .m? Además, ¿debería convertirlo en una propiedad? ¿O nunca debería hacer de algo una propiedad? Gracias.¿Cómo creo una variable de instancia BOOL en el objetivo c?
Respuesta
Necesito crear una variable de instancia de tipo BOOL con un valor predeterminado de FALSE en una de mis clases objetivo c. ¿Cómo hago esto?
Suponiendo que está utilizando el Xcode actual, puede declarar la Ivar en la implementación de esta manera:
@implementation MyClass
{
@private
BOOL myBool;
}
He visto gente lo define en su archivo .h pero don' Realmente necesito que esta variable sea pública.
Históricamente, había que declarar variables de instancia en el @interface
debido a la forma en que se implementaron las clases. Esto ahora es necesario solo si se dirige a 32 bits OS X.
Además, ¿debo hacer una propiedad?
Eso depende. Definitivamente debe convertirlo en propiedad si es parte de la API externa de su clase (para clases o subclases no relacionadas). Si solo es parte del estado interno del objeto, no necesita convertirlo en una propiedad (y yo no lo hago). t).
O si alguna vez no hacer algo una propiedad? Gracias.
Si no está utilizando ARC y el tipo es un tipo de objeto (BOOL no lo es) siempre se debe hacer una propiedad para aprovechar la administración de la memoria de los accesadores sintetizados. Si es usando ARC, el consejo en la lista de desarrolladores de Apple es hacer cosas que formen parte de las propiedades de la API. y cosas que son estado interno como ivars.
Tenga en cuenta que, incluso para el estado interno, es posible que desee utilizar KVO, en cuyo caso, utilice una propiedad.
Si declara este BOOL como una propiedad y lo sintetiza, no necesita declarar explícitamente el ivar. Si desea hacer que la propiedad "visible", sólo para la propia clase, utilizar una extensión de clase
@interface MyClass()
@property (assign) BOOL myBool;
@end
@implementation MyClass
@synthesize myBool = myBool_; // creates an ivar myBool_ to back the property myBool.
@end
Tenga en cuenta que, aunque el compilador producirá advertencias de lo anterior, en tiempo de ejecución, cualquier clase puede enviar setMyBool:
o myBool
a los objetos de MyClass
.
Si lo convierte en una propiedad, es público. Si no desea que la variable sea pública, entonces no use una propiedad. ¿Por qué no quieres ser público? Puede tener propiedad de solo lectura y hacer que se pueda escribir en usted .m a través de una categoría privada.
Usted puede ponerlo en su archivo .m si utiliza iOS 5
@implementation MyClass {
BOOL _myBool;
}
Creo que esto es nuevo para iOS5. Pero he visto código como este también:
@implementation MyClass {
@private
BOOL _myBool;
}
Espero que esto ayude.
"Si lo convierte en una propiedad, es público". En realidad no. Las propiedades se pueden declarar de forma privada en una extensión o categoría de clase. – jlehr
Pero si no haces nada, son públicos. – Pfitz
Si no hace nada, no tiene nada. Lo que determina si un método o una propiedad es público es dónde se declara. Si se declara en el encabezado, es públicamente visible; de lo contrario no lo es. (Sin embargo, no hay ejecución en tiempo de ejecución) – jlehr
BOOL se declaran como iVars con un simple BOOL myBool
, y como una propiedad con @property (nonatomic, assign) BOOL myBool
. Sin embargo, tome nota, los valores BOOLean se inician en NO (nil). Si necesita un BOOL para ser accesible desde otras clases, o "global" en el archivo m, use un iVar o una propiedad, de lo contrario simplemente declare como vars de ámbito en un método individual.
Si desea hacer una variable privada puede usar la potencia de las categorías. Hacer una clase MyClass por ejemplo y en el archivo .m haga lo siguiente:
#import "MyClass.h"
@interface MyClass() //This is an empty category on MyClass class
@property (nonatomic, assign) BOOL myBool;
@end
@implementation MyClass
@synthesize myBool = _myBool;
-(void)myMethod {
self.myBool = YES; //this is using the property
_myBool = NO; //this is the instance variable, as @synthesize creates an instance variable for you
// both are private
}
@end
Se puede retener la declaración en el archivo .m
.
Si usted hace una propiedad, depende de lo que desee. Como propiedad, más adelante puede aplicar setter/getter que incluya control/guardias/lo que sea. Además, puede aplicar acceso a valores-clave.
Si no necesita uno de esto, no hay una necesidad real de una propiedad (pero una buena tradición: nunca se sabe cómo evolucionará su código).
i uso 0, 1 vez YES, NO
#define YES 1
#define NO 0
- 1. Cómo usar la variable estática (BOOL) en el Objetivo C
- 2. cómo imprimir bool en el objetivo c
- 3. Objetivo-C: BOOL vs bool
- 4. BOOL envoltura? Haz un objeto de valor 'BOOL'. (Objetivo-C)
- 5. Punteros de variable de instancia Objective-C
- 6. ¿BOOL es de lectura/escritura atómica en el Objetivo C?
- 7. ¿Cómo creo una variable local estática en Java?
- 8. Teclee una variable de jBoolean a bool
- 9. Variable de cadena estática en el Objetivo C en iphone
- 10. ¿Cómo creo una cantidad variable de variables?
- 11. objetivo básico C declaración de variable
- 12. ¿Cómo creo una instancia a partir de una cadena en C#?
- 13. Variables de instancia para Categorías de Objetivo C
- 14. Ajuste del objetivo C en el objetivo C++/C++
- 15. ¿Cómo creo una cadena de espacios en blanco en C++?
- 16. Bloqueando una sola variable bool cuando multihilo?
- 17. Imprima el nombre de la variable objetivo-C
- 18. Objetivo C: variable estática y global?
- 19. ¿Cómo se almacena una variable de tipo bool en la memoria? (C++)
- 20. Inicialización de variable de instancia en Ruby
- 21. pi en el objetivo C
- 22. ¿Cómo funciona una variable en C/C++?
- 23. Cambiar una variable de instancia en un bloque
- 24. Cuándo NO se debe usar el asterisco (*) al declarar una variable en el Objetivo C
- 25. ¿Cómo creo un atajo (.lnk) con un objetivo relativo?
- 26. Cómo dibujar una rueda de color en el objetivo-c
- 27. Objetivo C - ¿Cómo uso el método initWithCoder?
- 28. Objetivo C - Subclase de NSArray
- 29. en C# ¿Qué significa 'bool = bool! = True'?
- 30. ¿Cómo creo una matriz de botones C#?
Probar: '- (void) viewDidLoad { bandera BOOL = NO; } '. Además, una vez que desee declarar en su archivo .m no podrá sintetizarlo desde un archivo .m. –
¿Dónde debería definir 'flag'? ¿No tiene sentido en el archivo .m? Sin embargo, no puedo entender la sintaxis para eso. Thx – Nosrettap
define la propiedad en la clase .m como lo hace en .h ... hará que el bool sea privado para la clase no accesible desde el exterior. – iphonic