2012-11-21 130 views
2

编辑 - 对错字表示歉意,因为我不得不离开建筑物,但是呃......我可以问,为什么downvotes?仅仅是因为一些语法错误?我很乐于接受批评,但请具有建设性?Objective-C ivar BOOL不能保留价值

感谢您的建设性的答案,我已经给了upvote。

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

我有一个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与分配,但为什么这伊娃不保留它的价值?

编辑

没关系呀,哇,东西是真的搞砸了这里...我试图与@property来取代它,它仍然没有工作。然后我试图“找到所有项目”为变量myBool和我不会改变任何其他地方

注:我使用cocos2d的,但我不认为应该有什么影响

+1

你确定你没有错过'@ end'在'@ implementation'之前? – dasblinkenlight

+0

我不认识用于声明'addObjectsToGame'的语法,其中方括号后面带括号。而你并没有以'[self addObjectsToGame]'的形式调用它。显然,这不是一个标准的Objective-C文件。这是Objective-C++吗? – Rob

+1

你能给我们真正的代码吗? ' - (void)addObjectsToGame()'是无效的obj-c – vikingosegundo

回答

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

这伊娃保留它的价值,只要你没有做任何别的事情搞砸了

#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 

此代码没有失败

0

哇哦,我是在iOS这样的小白 -

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

这是真正的原因;然而,我打算接受别人的答案,看到这是一个微不足道的错误在制作

+1

“而不是随机” - 这些是C风格的自动变量,它们是堆栈分配的。实例变量在创建实例时由运行时清零。 – 2012-11-24 21:59:47