Jaka jest domyślna wartość zmiennej BOOL
w Objective-C?Wartość domyślna BOOL
Odpowiedz
Jest żadna wartość domyślna jeśli piszesz
-(void)somemethod {
BOOL x; // <--- no default value
jest inicjowane śmieci.
Jednak dla BOOL
ivar, zostanie zainicjowane NO
jako całość przykład jest wypełniona 0 inicjalizacji.
(Uwaga:.. Kiedy ARC jest włączona, lokalne obiektów wskaźniki zawsze będzie mieć wartość domyślną nil
, ale zmienne lokalne typów nie obiektowych jak BOOL nadal są inicjowane na śmieci Zobacz Local variables set to nil? (Objective-C))
Zrobiłem kilka własnych eksperymentów przy użyciu Xcode 5.1, OS X Mavericks 10.9.4. Dla tych, którzy nie wiedzą, ALog to zmodyfikowany NSLog. W każdym razie, pierwszym eksperymentem było użycie isLandscape
jako zmiennej publicznej, z @synthesize
, do uzyskania dostępu przez nadrzędny kontroler widoku (pokazany poniżej). W drugim eksperymencie nie użyto @synthesize
, a ja, oczywiście, użyłem self.isLandscape
, aby uzyskać ten sam wynik w konsoli. Dane wyjściowe konsoli znajdują się poniżej mojego kodu. Trzeci eksperyment użył "isLandscape" jako zmiennej lokalnej w metodzie.
@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);
}
Wyniki te pochodzą z dwóch pierwszych eksperymentów ...
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
W trzecim doświadczeniu „isLandscape” nie była już własnością. I ustawić ją jako zmienną lokalną z ciekawszych wyników:
- (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);
}
Wyniki te są od trzeciego eksperymentu ...
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
Zgaduję Właściwości się zainicjowana przez mnie lub Xcode automatycznie, ale zmienne lokalne nie otrzymują żadnych wartości. Mimo to, spójrz na [Line 164] zmienna lokalna nie jest TAK lub NIE, ale nie jest zerowa? Przypuszczam, że jest to (losowa) wartość śmieci, na którą nie można liczyć. Mam nadzieję, że pomoże to następnej osobie. Nauczyłem się czegoś, ale czekam na komentarze. Dzięki i życzę powodzenia!
- 1. Wartość domyślna dla bool w C#
- 2. Domyślna wartość właściwości statycznej
- 3. DataContract, domyślna wartość DataMember
- 4. eval "$ (domyślna wartość domyślna docker-machine)"
- 5. Wartość domyślna atrybutu JAXB
- 6. Preferowany Domyślna wartość dzwonek
- 7. Klasy ES6 Wartość domyślna
- 8. Domyślna wartość log4j MDC:
- 9. ansibl with_subelements Wartość domyślna
- 10. Wartość domyślna ComboBox FXML
- 11. Wartość domyślna typu dynamicznego?
- 12. zmień wartość domyślna kolumna
- 13. Wartość domyślna preferencji Androida
- 14. Android CheckBoxPreference Wartość domyślna
- 15. DependencyProperty Wartość domyślna
- 16. Wartość domyślna na generycznego predykatu jako argument
- 17. Ustaw wartość BOOL na NSMutableDictionary
- 18. wartość bool listy w Pythonie
- 19. Ustawienie sprawdzana wartość eval (Bool)
- 20. Python argparse: wartość domyślna lub podana wartość
- 21. Ustawiona wartość domyślna pakietu nie zostanie ustawiona.
- 22. Skąd pochodzi domyślna wartość mb_internal_encoding()?
- 23. Wartość domyślna UserControl w usłudze
- 24. Metoda Domyślna wartość array parametr
- 25. Wartość domyślna zmiennych w PHP?
- 26. Wartość domyślna maxConcurrentOperationCount dla NSOperationQueue
- 27. Record Wartość domyślna Składnia akcesor
- 28. combobox wartość domyślna winforms C#
- 29. RestTemplate - domyślna wartość limitu czasu
- 30. Wartość domyślna typu w Runtime
Czy możesz liczyć na to, że BOOL non ivar będzie zawsze tym samym śmieciem? czy jest inaczej? (tzn. widzę, że ocenia on wartość całkowitą "2" w instrukcji NSlog) – bentford
@bentford: Nie, nie możesz. – kennytm
@bentford Nazwa ivar jest inicjowana na "NIE", jak wspomniano powyżej. Myślę, że masz na myśli var. –