Objective-C ivar BOOL没有保持价值

时间:2012-11-21 03:08:47

标签: objective-c ios variables

编辑 - 为错字道歉,我匆匆忙忙,因为我不得不离开大楼,但是......我可能会问,为什么这只是投票?只是因为一些语法错误?我很乐意受到批评,但请建设性的吗?

感谢建设性的答案,我给了他们两个赞成。

=============================================

我有一个iVar BOOL,我想在整个课程中使用它。我尝试将其初始化为YES,但是第一次读出它时,它是NO。这是为什么?这对我来说很奇怪,因为我的int都被保留了。

在我的.mm文件中,我有类似的内容:

@interface MyClass : NSObject {
    BOOL myBool;
    int myInt;
}

@end

@implementation MyClass

-(id)init{
    //...
    myInt = 3;
    myBool = YES; //here i set it
    //...
    [self addObjectsToGame];
    //...
}

-(void)addObjectsToGame{
    //...
    assert(myInt == 3);
    assert(myBool);    // <---- this line would fail
    //...
}

@end

我知道我可以使用带有赋值的@property,但为什么这个iVar不能保留它的值?

修改

好吧,是的,哇,这里真的搞砸了......我试图用@property代替它,但它仍然没有用。然后我试图为变量myBool“找到项目中的所有内容”,我不会在其他地方更改

注意:我正在使用cocos2d,但我认为这不会影响任何事情

3 个答案:

答案 0 :(得分:2)

我为你修复了Objective-C语法,一切都按预期工作

#import <Foundation/Foundation.h>

@interface MyClass : NSObject {
    BOOL myBool;
    int myInt;
}
-(void)addObjectsToGame;
@end

@implementation MyClass

-(id)init{
    if (self = [super init])
    {
        myInt = 3;
        myBool = YES; //here i set it
        [self addObjectsToGame];
    }
    return self;
}

-(void)addObjectsToGame{
    assert(myInt == 3);
    assert(myBool);
    NSLog(@"OK");
}

@end


int main(int argc, char *argv[]) {
    @autoreleasepool {
        [MyClass new];
    }
}

答案 1 :(得分:1)

这个iVar 保留它的价值,只要你不做任何其他事情搞乱它

#import <Foundation/Foundation.h>

@interface MyClass : NSObject {
    BOOL myBool;
    int myInt;
}
@end

@implementation MyClass

-(id)init{
    //...
    myInt = 3;
    myBool = YES; //here i set it
    //...
    [self addObjectsToGame];
    //...
    return self;
}

-(void)addObjectsToGame{
    //...
    assert(myInt == 3);
    assert(myBool);    // <---- this line would fail
    //...
    NSLog(@"didn't fail");
}

@end

此代码未失败

答案 2 :(得分:0)

噢,哇,我是iOS上的一个菜鸟 -

所有BOOL值都初始化为NO(而不是随机),我继续获取NO的原因是因为我在分配之前一直使用BOOL权限,而且我已经把它non-atomic(虽然这在大多数时间都无关紧要)

这才是真正的原因;但是,我会接受别人的回答,因为这在制作中是一个微不足道的错误