回答:
あなたが書いた場合、デフォルト値はありません
-(void)somemethod {
BOOL x; // <--- no default value
ガベージに初期化されます。
ただし、BOOL
ivarの場合、初期化時にNO
インスタンス全体が0で満たされるため、に初期化されます。
(注:ARCが有効になっている場合、ローカルオブジェクトポインターは常にデフォルト値になりますが、nil
BOOLなどの非オブジェクトタイプのローカル変数は引き続きガベージに初期化されます。ローカル変数がnil?に設定されている(Objective-C)を参照してください。)
NO
上記のように初期化されます。私はあなたがvarを意味すると思います。
Xcode 5.1、OS X Mavericks 10.9.4を使用して、自分でいくつかの実験を行いました。ALogを知らない人のために、変更されたNSLogです。とにかく、最初の実験はisLandscape
、パブリック変数として使用することでした。@synthesize
、親のビューコントローラー(以下に表示)からアクセスされるすることでした。2番目の実験は使用せず@synthesize
、明らかにself.isLandscape
コンソールで同じ結果を得るために使用しました。コンソール出力は私のコードの下にあります。3番目の実験では、メソッド内のローカル変数として「isLandscape」を使用しました。
@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);
}
これらの結果は最初の2つの実験からのものです…
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
3番目の実験では、「isLandscape」はプロパティではなくなりました。私は興味深い結果を持つローカル変数に設定しました:
- (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);
}
これらの結果は3番目の実験からのものです…
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
プロパティは私またはXcodeによって自動的に初期化されると思いますが、ローカル変数はまったく値を取得しません。それでも、[行164]を見てください。ローカル変数はYESまたはNOではありませんが、nil以外ですか?数えられない(ランダムな)ゴミの値だと思います。これが次の人のお役に立てば幸いです。何かを学びましたが、コメントをお待ちしています。よろしくお願いします。