Objective-C에서 변수 BOOL
의 기본값은 무엇입니까? 당신이 쓰레기로 초기화된다BOOL의 기본값
-(void)somemethod {
BOOL x; // <--- no default value
를 작성하는 경우
Objective-C에서 변수 BOOL
의 기본값은 무엇입니까? 당신이 쓰레기로 초기화된다BOOL의 기본값
-(void)somemethod {
BOOL x; // <--- no default value
를 작성하는 경우
는 없는 기본 값이 있습니다. 모든 인스턴스가 초기에 0으로 채워진다
그러나 BOOL
아이바 들어,, NO
초기화한다.
(참고 :.. ARC가 활성화되면, 지역 객체 포인터 항상 기본값 nil
을 수 있지만 BOOL 같은 비 객체 유형의 지역 변수가 여전히 쓰레기로 초기화 Local variables set to nil? (Objective-C)보기)
나는 Xcode 5.1, OS X Mavericks 10.9.4를 사용하여 내 자신의 실험을했다. 알지 못하는 사람들은 수정 된 NSLog를 사용합니다. 어쨌든 첫 번째 실험은 @synthesize
과 함께 공개 변수로 isLandscape
을 사용하여 부모보기 컨트롤러 (아래에 표시됨)에서 액세스하도록했습니다. 두 번째 실험에서는 @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);
}
이러한 결과는 제 3 실험 '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
는 더 이상 재산이었다 ... 처음 두 실험 없습니다. 나는 특성이 자동으로 나 또는 엑스 코드에 의해 초기화 얻을 같은데요
- (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
있지만, 지역 변수 : 나는 로컬 흥미로운 결과가 변수가 될하도록 설정 전혀 값을 얻지 못한다. 그렇다하더라도, [Line 164]에서 로컬 변수는 YES 또는 NO가 아니지만 non-nil입니까? 나는 그것이 당신이 의지 할 수없는 (임의의) 쓰레기 값이라고 생각합니다. 나는 이것이 다음 사람을 돕기를 바랍니다. 나는 무언가를 배웠다. 그러나 나는 코멘트를 고대한다. 감사와 행운을 빕니다!
비 ivar BOOL을 항상 같은 쓰레기로 계산할 수 있습니까? 아니면 다른가요? (즉, NSlog 문에서 '2'의 정수 값으로 평가됩니다.) – bentford
@bentford : 불가능합니다. – kennytm
@bentford ivar은 위에서 언급 한 것처럼 'NO'로 초기화됩니다. 나는 당신이 var를 의미한다고 생각합니다. –