Devo creare una variabile di istanza di tipo BOOL
con un valore predefinito di False
in una delle mie classi Objective-C. Come faccio a fare questo? Ho visto persone che lo definiscono nel loro file .h ma non ho davvero bisogno che questa variabile sia pubblica. Quindi non dovrei inserirlo nel mio file .m? Inoltre, dovrei renderlo un immobile? O non dovrei mai fare qualcosa di una proprietà? Grazie.Come si crea una variabile di istanza BOOL nell'obiettivo c?
risposta
Ho bisogno di creare una variabile di istanza di tipo BOOL con un valore predefinito di FALSE in una delle mie classi di obiettivo c. Come faccio a fare questo?
Supponendo che si sta utilizzando il Xcode corrente, è possibile dichiarare l'Ivar nell'attuazione come questo:
@implementation MyClass
{
@private
BOOL myBool;
}
Ho visto persone definiscono nel loro file .h ma io don' Ho davvero bisogno che questa variabile sia pubblica.
Storicamente, è necessario dichiarare variabili di istanza nello @interface
a causa del modo in cui sono state implementate le classi. Questo è ora necessario solo se si sta utilizzando OS X a 32 bit.
Inoltre, dovrei renderlo un immobile?
Dipende. Dovresti sicuramente renderlo una proprietà se fa parte dell'API esterna della tua classe (per classi o sottoclassi non correlate da utilizzare. Se è solo una parte dello stato interno dell'oggetto, non è necessario renderlo una proprietà (e io non lo faccio) t).
O non dovrei mai fare qualcosa di un immobile? Grazie.
Se non si utilizza ARC e il tipo è un tipo di oggetto (BOOL non lo è) si dovrebbe sempre farlo una proprietà per sfruttare la gestione della memoria degli accessori sintetizzati.Se si è utilizzando ARC, il consiglio sull'elenco degli sviluppatori Apple è di creare cose che fanno parte delle proprietà API e cose che sono stato interno come ivar.
Si noti che, anche per stato interno, è possibile utilizzare KVO, nel qual caso, utilizzare una proprietà.
Se si dichiara questo BOOL come proprietà e lo si sintetizza, non è necessario dichiarare esplicitamente ivar. Se si vuole fare la proprietà "visibile" solo per la classe stessa, utilizzare un'estensione di classe
@interface MyClass()
@property (assign) BOOL myBool;
@end
@implementation MyClass
@synthesize myBool = myBool_; // creates an ivar myBool_ to back the property myBool.
@end
Si noti che, anche se il compilatore produrrà avvertenze per quanto sopra, in fase di esecuzione, ogni classe può inviare setMyBool:
o myBool
agli oggetti di MyClass
.
Se si effettua una proprietà è pubblica. Se non vuoi che la variabile sia pubblica, allora non usare una proprietà. Perché non vuoi essere pubblico? Puoi avere proprietà readonly e renderlo scrivibile in .m tramite una categoria privata.
Si può mettere nel file .m se si utilizza iOS 5
@implementation MyClass {
BOOL _myBool;
}
Credo che questa sia una novità per iOS5. Ma ho visto un codice come questo:
@implementation MyClass {
@private
BOOL _myBool;
}
Spero che questo aiuti.
"Se si rende una proprietà è pubblica." In realtà, no. Le proprietà possono essere dichiarate privatamente in un'estensione di classe o in una categoria. – jlehr
Ma se non fai nulla sono pubblici. – Pfitz
Se non fai niente, non hai nulla. Ciò che determina se un metodo o una proprietà è pubblico è dove è dichiarato. Se è dichiarato nell'intestazione, è pubblicamente visibile; altrimenti non lo è. (Non ci sono tuttavia delle applicazioni runtime.) – jlehr
BOOL sono dichiarati come iVars con un semplice BOOL myBool
e come proprietà con @property (nonatomic, assign) BOOL myBool
. Prendi nota però, i valori BOOLean sono inizializzati su NO (zero). Se hai bisogno di un BOOL per essere accessibile da altre classi, o "globale" nel file m, usa un iVar o una proprietà, altrimenti semplicemente dichiarali come scope vars in un singolo metodo.
Se si desidera creare una variabile privata, è possibile utilizzare la potenza delle categorie. Fare un classe MyClass per esempio e nel file .m effettuare le seguenti operazioni:
#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
si può mettere la dichiarazione nel file .m
.
Se si crea una proprietà da esso, dipende da ciò che si desidera. Come proprietà, è possibile applicare in seguito setter/getter che includono controllo/protezioni/qualunque sia. Inoltre, è possibile applicare l'accesso valore-chiave.
Se non è necessario uno di questi, non c'è un reale bisogno di una proprietà (ma una buona tradizione: non si sa mai, come si evolverà il codice).
io uso 0, 1, invece YES, NO
#define YES 1
#define NO 0
- 1. Crea istanza di una classe generica C#
- 2. Blocco di una variabile di istanza in Objective-C
- 3. Perché creare DUP quando si crea una nuova istanza
- 4. Modifica di una variabile di istanza in un blocco
- 5. Come si crea una variabile fittizia in R?
- 6. Crea istanza parola esclusiva
- 7. Crea nuova istanza di Singleton
- 8. Variabile di istanza CoffeeScript
- 9. Java -Che cos'è una variabile di istanza?
- 10. Come utilizzare la variabile statica (BOOL) nell'obiettivo C
- 11. Come si crea una matrice di pulsanti C#?
- 12. Come si crea una matrice di CGFloats nell'obiettivo c?
- 13. Che cos'è una variabile di istanza?
- 14. Aggiungi una proprietà senza variabile di istanza?
- 15. Crea istanza di oggetto di una classe che ha il suo nome nella variabile stringa
- 16. Crea istanza di tipo generico?
- 17. Come viene memorizzata una variabile di tipo bool in memoria? (C++)
- 18. punto di avere una variabile di istanza come finale?
- 19. Come si crea un numero variabile di variabili?
- 20. Crea istanza di una classe con dipendenze utilizzando Autofac
- 21. Variabile di istanza Python come parametro predefinito
- 22. Come passare una variabile di istanza in argomenti decoratore dattiloscritto?
- 23. Dichiarazione della variabile bool in c sulla piattaforma linux
- 24. Come si crea una finestra delle preferenze in Objective-C?
- 25. Come si crea un programma C# senza una GUI?
- 26. Come si crea funzioni stub?
- 27. iOS - AppDelegate come variabile di istanza?
- 28. Come si crea una variabile temporanea in una classe di dominio Grails?
- 29. Come si crea in modo esplicito una copia di una variabile in PHP?
- 30. startActivity che crea ogni volta una nuova istanza di attività
Prova: '- (void) {viewDidLoad BOOL bandiera = NO; } '. Inoltre, una volta che si desidera dichiarare nel file .m non è possibile sintetizzarlo da un file .m. –
Dove dovrei definire 'flag'? Non ha senso nel file .m? Tuttavia, non riesco a capire la sintassi per questo. Thx – Nosrettap
definisce la proprietà nella classe .m come fai in .h .. renderà il bool privato alla classe non accessibile dall'esterno. – iphonic