BOOL의 기본값
BOOL
Objective-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
'programing' 카테고리의 다른 글
gitignore를 사용하여 파일 무시 (삭제는 아님) (0) | 2020.08.28 |
---|---|
flex : 1은 무엇을 의미합니까? (0) | 2020.08.28 |
Angular에서 현재 URL 가져 오기 (0) | 2020.08.28 |
Moq를 사용하여 ASP.NET MVC에서 HttpContext를 어떻게 모의합니까? (0) | 2020.08.27 |
OperationCanceledException과 TaskCanceledException의 차이점은 무엇입니까? (0) | 2020.08.27 |