2

编辑- 为错字道歉,我很着急,因为我不得不离开大楼,但是嗯......我可以问一下,为什么不赞成?仅仅因为一些语法错误?我愿意接受批评,但请有建设性吗?

感谢您的建设性回答,我都投了赞成票。

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

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

在我的.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 与assign 一起使用,但为什么这个iVar 不能保留它的价值?

编辑

好吧,是的,哇,这里真的有些乱了......我试图用它来替换它,@property但它仍然无法正常工作。然后我尝试为变量“在项目中查找所有内容”,myBool并且我没有在其他任何地方更改它

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

4

3 回答 3

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];
    }
}
于 2012-11-21T03:39:48.807 回答
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

这段代码没有失败

于 2012-11-21T03:25:41.633 回答
0

哦,哇,我在 iOS 上真是个菜鸟——

所有BOOL值都初始化为NO(而不是随机的),我不断得到的原因NO是因为我在分配它之前一直在使用BOOL它,而且我已经做到了non-atomic(尽管这在大多数情况下并不重要)

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

于 2012-11-24T21:39:11.123 回答