首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >BOOL的默认值

BOOL的默认值
EN

Stack Overflow用户
提问于 2010-05-27 17:02:38
回答 1查看 52.7K关注 0票数 98

Objective-C中BOOL变量的默认值是多少?

EN

回答 1

Stack Overflow用户

发布于 2014-08-28 20:59:39

我自己用Xcode5.1,OS 10.9.4做了一些实验。对于那些不知道ALog的人来说,它是一个经过修改的NSLog。无论如何,第一个实验是使用@synthesizeisLandscape用作公共变量,以供父视图控制器访问(如下所示)。第二个实验没有使用@synthesize,显然,我使用self.isLandscape在控制台中获得了相同的结果。控制台输出在我的代码下面。第三个实验使用“isLandscape”作为方法中的局部变量。

代码语言:javascript
复制
@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);
}

这些结果来自前两个实验…

代码语言:javascript
复制
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’不再是一个属性。我将其设置为具有有趣结果的局部变量:

代码语言:javascript
复制
- (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);
}

这些结果来自第三个实验…

代码语言:javascript
复制
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行的局部变量不是YES或NO,但它是非nil吗?我猜这是你不能指望的(随机的)垃圾值。我希望这对下一个人有帮助。我学到了一些东西,但我期待着评论。谢谢,祝你好运!

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2919745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档