programing

BOOL의 기본값

nasanasas 2020. 8. 28. 07:32
반응형

BOOL의 기본값


BOOLObjective-C에서 변수 의 기본값은 무엇입니까 ?


쓰면 기본값 없습니다.

-(void)somemethod {
  BOOL x;  // <--- no default value

쓰레기로 초기화됩니다.

그러나 BOOL ivar의 경우 초기화시 NO전체 인스턴스가 0으로 채워 지므로로 초기화됩니다 .

(참고 : ARC가 활성화되면 로컬 객체 포인터 는 항상 기본값을 nil갖지만 BOOL과 같은 비 객체 유형의 로컬 변수는 여전히 가비지로 초기화됩니다. 로컬 변수가 nil로 설정되어 있습니까? (Objective-C)를 참조하십시오 .)


Xcode 5.1, OS X Mavericks 10.9.4를 사용하여 몇 가지 실험을했습니다. ALog를 모르는 사람들을 위해 수정 된 NSLog입니다. 어쨌든 첫 번째 실험은 부모 뷰 컨트롤러 (아래에 표시됨)에서 액세스 할 수 있도록 을 사용 isLandscape하여 공용 변수 로 사용 하는 것이 었습니다 @synthesize. 두 번째 실험은 사용하지 않았고 @synthesize나는 분명히 self.isLandscape콘솔에서 동일한 결과를 얻었습니다. 콘솔 출력은 내 코드 아래에 있습니다. 세 번째 실험에서는 메서드 내에서 '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);
}

이 결과는 처음 두 실험에서 얻은 것입니다.

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

세 번째 실험에서 '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);
}

이 결과는 세 번째 실험에서 얻은 것입니다…

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

I’m guessing properties get initialized by me or Xcode automatically, but local variables get no values at all. Even so, look at [Line 164] local variable is not YES or NO but it is non-nil? I guess it is the (random) garbage value that you cannot count on. I hope this helps the next person. I learned something but I look forward to comments. Thanks and good luck!

참고URL : https://stackoverflow.com/questions/2919745/default-value-of-bool

반응형