BOOL
Objective-C'de bir değişkenin varsayılan değeri nedir ?
Yanıtlar:
Yazarsan varsayılan değer yok
-(void)somemethod {
BOOL x; // <--- no default value
Çöp olarak başlatılır.
Ancak, bir BOOL
ivar için NO
, tüm örnek başlatma sırasında 0 ile doldurulduğundan, olarak başlatılacaktır.
(Not: ARC etkinleştirildiğinde, yerel nesne işaretçileri her zaman varsayılan bir değere sahip olacaktır nil
, ancak BOOL gibi nesne olmayan türlerin yerel değişkenleri yine de çöp olarak başlatılır. Bkz. Yerel değişkenler sıfır olarak mı ayarlanmış? (Amaç-C) .)
Xcode 5.1, OS X Mavericks 10.9.4 kullanarak kendi deneylerimi yaptım. ALog'u bilmeyenler için değiştirilmiş bir NSLog. Her neyse, ilk deney isLandscape
genel bir değişken olarak kullanmaktı ve @synthesize
üst görünüm denetleyicisi (aşağıda gösterilmektedir) tarafından erişilecek. İkinci deney işe yaramadı @synthesize
ve açıkçası self.isLandscape
aynı sonucu konsolda almak için kullandım . Konsol çıktısı kodumun altında. Üçüncü deney, bir yöntem içinde yerel bir değişken olarak 'isLandscape'i kullandı.
@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);
}
Bu sonuçlar ilk iki deneyden alınmıştır…
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
ÜÇÜNCÜ DENEYDE 'isLandscape' artık bir özellik değildi. Bunu ilginç sonuçlarla yerel bir değişken olarak ayarladım:
- (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);
}
Bu sonuçlar üçüncü deneyden alınmıştır ...
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
Tahminimce özellikler benim tarafımdan veya Xcode tarafından otomatik olarak başlatılır, ancak yerel değişkenler hiç değer almaz. Öyle olsa bile, bakın [Satır 164] yerel değişken EVET veya HAYIR değil ama sıfır değil mi? Sanırım güvenemeyeceğiniz (rastgele) çöp değeridir. Umarım bu bir sonraki kişiye yardımcı olur. Bir şey öğrendim ama yorumları dört gözle bekliyorum. Teşekkürler ve iyi şanslar!