Objective-C'de BOOL
değişkeninin varsayılan değeri nedir? Eğer bu çöp için başlatılırVarsayılan değer BOOL
-(void)somemethod {
BOOL x; // <--- no default value
yazarsanız
Objective-C'de BOOL
değişkeninin varsayılan değeri nedir? Eğer bu çöp için başlatılırVarsayılan değer BOOL
-(void)somemethod {
BOOL x; // <--- no default value
yazarsanız
hiçbir varsayılan değer yoktur. Bütün örneği başlatma üzerinde 0 ile doldurulur olarak
Ancak, BOOL
Ivar için, bu NO
için başlatılır.
(Not:.. ARC etkinleştirildiğinde, yerel nesne işaretçileri hep bir varsayılan değer nil
sahip olacak, ama BOOL gibi olmayan nesne tiplerinin yerel değişkenler hala çöp başlatılır Local variables set to nil? (Objective-C) bakınız)
Xcode 5.1, OS X Mavericks 10.9.4'ü kullanarak kendi deneylerimi yaptım. ALog bilmeyenler için değiştirilmiş bir NSLog. Her neyse, ilk deney, 'un, @synthesize
numaralı ana değişkenin ana görüntüleme denetleyicisi tarafından erişilebilmesi (aşağıda gösterilmektedir) olarak kullanmaktı. İkinci deneyde @synthesize
kullanmamıştım ve açıkçası, konsolda aynı sonucu almak için self.isLandscape
kullanmıştım. Konsol çıkışı kodumun altında. Üçüncü deneme, bir metodun 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 ÜÇÜNCÜ DENEY ‘Islandscape’ in
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
artık bir özellik oldu ... İlk iki deneyden elde edilenlerdir. Ben özellikleri otomatik olarak bana veya Xcode tarafından başlatılan, tahmin ediyorum
- (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 gelir ...
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
, ancak yerel değişkenleri: yerel bir ilginç sonuçlarla değişken olacak biçimde ayarlayın hiç değer almayın. Öyle bile olsa, [Line 164] yerel değişkeni EVET ya da HAYIR değil, sıfır değil mi? Güvenemeyeceğiniz (rastgele) çöp değeridir sanırım. Umarım bu bir sonraki kişiye yardımcı olur. Bir şey öğrendim ama yorumları bekliyorum. Teşekkürler ve iyi şanslar!
Her zaman aynı çöplükte olmak için ivar dışı BOOL'a güvenebilir misiniz? ya da farklı mı? (Yani, bir NSlog ifadesinde '2' tamsayı değerine göre değerlendirdiğimi görüyorum) – bentford
@bentford: Hayır yapamazsın. – kennytm
@bentford ivar, yukarıda belirtildiği gibi "NO" olarak başlatılmıştır. Bence var demek istiyorsun. –