Objective-C中BOOL
变量的默认值是什么?BOOL的默认值
Q
BOOL的默认值
86
A
回答
161
有没有默认值,如果你写
-(void)somemethod {
BOOL x; // <--- no default value
它被初始化为垃圾。
但是,对于一个BOOL
ivar,它将被初始化为NO
,因为整个实例在初始化时被填充为0。
(注:当ARC被启用,本地对象指针总会有一个默认值nil
,但非对象类型,如BOOL的局部变量仍然初始化为垃圾见Local variables set to nil? (Objective-C))
19
我使用Xcode 5.1,OS X Mavericks 10.9.4做了一些我自己的实验。对于那些不知道ALog的人来说是修改后的NSLog。无论如何,第一个实验是使用isLandscape
作为公共变量,@synthesize
由父视图控制器访问(如下所示)。第二个实验没有使用@synthesize
和I,显然,使用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的自动初始化,但局部变量根本没有任何价值。即使如此,看看[Line 164]局部变量不是YES或NO,但它不是零?我想这是(随机)垃圾值,你不能指望。我希望这有助于下一个人。我学到了一些东西,但我期待着评论。谢谢,祝你好运!
相关问题
- 1. C++中bool的默认值
- 2. c中bool的默认值#
- 3. FluentNHibernate为bool设置默认列值
- 4. 通过引用设置Bool的默认值
- 5. Python3 - 默认值为type的默认值?
- 6. 的SelectList默认值
- 7. textarea的默认值
- 8. textarea的默认值
- 9. DatePicker的默认值
- 10. 默认值的PSMultiValueSpecifier
- 11. 默认值 - InnoDB的
- 12. Honeycomb的默认值
- 13. xmlns的默认值?
- 14. 默认值:inputText的
- 15. read_only_fields的默认值
- 16. EditText的默认值
- 17. javadoc的默认值
- 18. 默认值
- 19. Facelets:ui:param默认值
- 20. DependencyProperty默认值
- 21. JTextArea默认值?
- 22. JQuery:DatePicker默认值
- 23. 默认值
- 24. Oracle默认值
- 25. MASShortcut - 默认值
- 26. RingtonePreference默认值
- 27. mysql默认值?
- 28. 默认值
- 29. 默认值
- 30. GetCultureInfo默认值
你能指望非伊娃尔布尔永远是相同的垃圾?或者它有什么不同? (即我看到它在NSlog语句中计算为'2'的整数值) – bentford 2010-10-30 15:42:43
@bentford:不,你不能。 – kennytm 2010-10-30 15:48:55
@bentford如上所述,伊娃被初始化为“否”。我认为你的意思是var。 – 2011-12-15 21:31:47