ค่าเริ่มต้นของBOOL
ตัวแปรใน Objective-C คืออะไร?
ค่าเริ่มต้นของBOOL
ตัวแปรใน Objective-C คืออะไร?
คำตอบ:
นอกจากนี้ไม่มีค่าเริ่มต้นถ้าคุณเขียน
-(void)somemethod {
BOOL x; // <--- no default value
เริ่มต้นเป็นขยะ
อย่างไรก็ตามสำหรับBOOL
ivarมันจะเริ่มต้นNO
เป็นเนื่องจากอินสแตนซ์ทั้งหมดเต็มไปด้วย 0 เมื่อเริ่มต้น
(หมายเหตุ: เมื่อเปิดใช้งาน ARC ตัวชี้วัตถุในเครื่องจะมีค่าเริ่มต้นnil
เสมอ แต่ตัวแปรโลคัลของประเภทที่ไม่ใช่อ็อบเจ็กต์เช่น BOOL ยังคงถูกกำหนดค่าเริ่มต้นเป็นขยะโปรดดูตัวแปรในเครื่องที่ตั้งค่าเป็นศูนย์? (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
ฉันคาดเดาคุณสมบัติเริ่มต้นโดยฉันหรือ Xcode โดยอัตโนมัติ แต่ตัวแปรในระบบไม่ได้รับค่าเลย ถึงอย่างนั้นให้ดูที่ตัวแปรโลคัล [บรรทัด 164] ไม่ใช่ใช่หรือไม่ใช่ แต่มันไม่ใช่ศูนย์? ฉันเดาว่ามันเป็นค่าขยะ (สุ่ม) ที่คุณไม่สามารถนับได้ ฉันหวังว่านี่จะช่วยคนต่อไป ฉันได้เรียนรู้บางสิ่งบางอย่าง แต่ฉันรอคอยที่จะแสดงความคิดเห็น ขอขอบคุณและขอให้โชคดี!