Qual è il valore predefinito di una variabile BOOL
in Objective-C?Valore predefinito di BOOL
risposta
Non v'è alcun valore di default se si scrive
-(void)somemethod {
BOOL x; // <--- no default value
E 'inizializzato a spazzatura.
Tuttavia, per un BOOL
ivar, verrà inizializzato a NO
, come l'intera istanza è riempito con 0 inizializzazione.
(Nota:.. Quando ARC è abilitato, locali puntatori oggetto sarà sempre avere un valore predefinito nil
, ma le variabili locali di tipo non-oggetto come BOOL sono ancora inizializzato a spazzatura Vedere Local variables set to nil? (Objective-C))
Ho fatto alcuni miei esperimenti usando Xcode 5.1, OS X Mavericks 10.9.4. Per coloro che non sanno che ALog è un NSLog modificato. Ad ogni modo, il primo esperimento era usare isLandscape
come variabile pubblica, con @synthesize
, a cui accedere dal controllore della vista genitore (visualizzato sotto). Il secondo esperimento non ha utilizzato @synthesize
e, ovviamente, ho utilizzato self.isLandscape
per ottenere lo stesso risultato nella console. L'output della console è sotto il mio codice. Il terzo esperimento ha utilizzato "isLandscape" come variabile locale all'interno di un metodo.
@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);
}
Questi risultati sono dai primi due esperimenti ...
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
nell'esperimento TERZO ‘isLandscape’ non era più una proprietà. Ho impostato ad essere una variabile locale con risultati interessanti:
- (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);
}
Questi risultati sono da terzo esperimento ...
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
sto cercando di indovinare le proprietà vengono inizializzate da me o Xcode automaticamente, ma le variabili locali non ottenere alcun valore. Anche così, la variabile locale [Riga 164] non è SÌ o NO, ma non è nulla? Immagino che sia il valore di spazzatura (casuale) su cui non puoi contare. Spero che questo aiuti la prossima persona. Ho imparato qualcosa ma attendo commenti. Grazie e buona fortuna!
- 1. Valore predefinito per bool in C#
- 2. DataContract, valore DataMember predefinito
- 3. Modificare il valore predefinito di booleano
- 4. SQLite che inserisce valore bool
- 5. Imposta valore BOOL su NSMutableDictionary
- 6. valore bool di un elenco in Python
- 7. Impostazione valore predefinito di DateTimePicker
- 8. RestTemplate - valore di timeout predefinito
- 9. Operatore mappa [] e bool come valore
- 10. TypeScript: Converti un valore bool in stringa
- 11. DependencyProperty Valore predefinito
- 12. Annotazione valore "null" predefinito
- 13. with_subelements ansible valore predefinito
- 14. Valore argomento predefinito C++
- 15. Valore attributo predefinito JAXB
- 16. Yii DropDownList valore predefinito
- 17. ES6 Classes Valore predefinito
- 18. RingtonePreference Valore predefinito
- 19. DropdownListFor valore predefinito
- 20. valore predefinito del puntatore.?
- 21. CheckBoxPreference Android Valore predefinito
- 22. valore predefinito per una proprietà statica
- 23. Come posso restituire un valore bool da una pletora di bool nullable?
- 24. valore Array Bash nell'assegnazione valore predefinito
- 25. Python argparse: valore predefinito o valore specificato
- 26. Valore di colonna predefinito con Doctrine2 e Symfony2 utilizzando YAML?
- 27. C++ predefinito enum utilizzo valore
- 28. Valore predefinito del parametro OptionalAttribute?
- 29. Valore predefinito del tipo dinamico?
- 30. Valore argomento Objective-C predefinito
Riesci a contare sul BOX non ivar per essere sempre la stessa spazzatura? o è diverso? (cioè sto vedendo valutare il valore intero di '2' in un'istruzione NSlog) – bentford
@bentford: No, non è possibile. – kennytm
@bentford L'ivar è inizializzato su 'NO' come menzionato sopra. Penso che tu intenda var. –