Risposte:
Non esiste un valore predefinito se scrivi
-(void)somemethod {
BOOL x; // <--- no default value
Viene inizializzato in Garbage.
Tuttavia, per un BOOL ivar , verrà inizializzato a NO, poiché l'intera istanza viene riempita con 0 durante l'inizializzazione.
(Nota: quando ARC è abilitato, i puntatori agli oggetti locali avranno sempre un valore predefinito nil, ma le variabili locali di tipi non di oggetti come BOOL sono ancora inizializzate come garbage. Vedere Variabili locali impostate su nil? (Objective-C) .)
NOcome menzionato sopra. Penso che intendi var.
Ho fatto alcuni esperimenti utilizzando Xcode 5.1, OS X Mavericks 10.9.4. Per chi non lo sapesse ALog è un NSLog modificato. Ad ogni modo, il primo esperimento è stato quello di utilizzare isLandscapecome variabile pubblica, con @synthesize, a cui si accede dal controller della vista genitore (mostrato sotto). Il secondo esperimento non usavo @synthesizee io, ovviamente, ero solito self.isLandscapeottenere 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 provengono 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
Nel TERZO ESPERIMENTO "isLandscape" non era più una proprietà. L'ho impostata come 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 provengono dal 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
Immagino che le proprietà vengano inizializzate automaticamente da me o da Xcode, ma le variabili locali non ottengono alcun valore. Anche così, guarda [Riga 164] la variabile locale non è SI o NO ma non è nulla? Immagino sia il valore di spazzatura (casuale) su cui non puoi contare. Spero che questo aiuti la prossima persona. Ho imparato qualcosa ma attendo con ansia i commenti. Grazie e buona fortuna!