Câu trả lời:
Không có giá trị mặc định nếu bạn viết
-(void)somemethod {
BOOL x; // <--- no default value
Nó được khởi tạo thành rác.
Tuy nhiên, đối với BOOL
ivar , nó sẽ được khởi tạo NO
, vì toàn bộ cá thể được điền bằng 0 khi khởi tạo.
(Lưu ý: Khi ARC được bật, con trỏ đối tượng cục bộ sẽ luôn có giá trị mặc định nil
, nhưng các biến cục bộ của các loại không phải đối tượng như BOOL vẫn được khởi tạo thành rác. Hãy xem Biến cục bộ được đặt thành nil? (Objective-C) .)
NO
như đã đề cập ở trên. Tôi nghĩ bạn có nghĩa là var.
Tôi đã thực hiện một số thử nghiệm của riêng mình bằng Xcode 5.1, OS X Mavericks 10.9.4. Đối với những người không biết ALog là một NSLog đã được sửa đổi. Dù sao, thử nghiệm đầu tiên là sử dụng isLandscape
như một biến công khai, với @synthesize
, được truy cập bởi bộ điều khiển chế độ xem gốc (hiển thị bên dưới). Thử nghiệm thứ hai đã không sử dụng @synthesize
và tôi, rõ ràng, đã từng self.isLandscape
nhận được kết quả tương tự trong bảng điều khiển. Đầu ra bảng điều khiển nằm bên dưới mã của tôi. Thử nghiệm thứ ba đã sử dụng 'isLandscape' làm biến cục bộ bên trong một phương thức.
@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);
}
Những kết quả này là từ hai thử nghiệm đầu tiên…
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
Trong THÍ NGHIỆM THỨ BA, 'isLandscape' không còn là tài sản nữa. Tôi đặt nó thành một biến cục bộ với kết quả thú vị:
- (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);
}
Những kết quả này là từ thử nghiệm thứ ba…
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
Tôi đoán các thuộc tính được khởi tạo bởi tôi hoặc Xcode tự động, nhưng các biến cục bộ không nhận được giá trị nào. Mặc dù vậy, hãy nhìn vào [Dòng 164] biến cục bộ không phải là CÓ hay KHÔNG mà nó không phải là con số không? Tôi đoán đó là giá trị rác (ngẫu nhiên) mà bạn không thể tin tưởng. Tôi hy vọng điều này sẽ giúp người tiếp theo. Tôi đã học được một cái gì đó nhưng tôi mong được nhận xét. Cảm ơn và chúc may mắn!