编辑 - 为错字道歉,我匆匆忙忙,因为我不得不离开大楼,但是......我可能会问,为什么这只是投票?只是因为一些语法错误?我很乐意受到批评,但请建设性的吗?
感谢建设性的答案,我给了他们两个赞成。
=============================================
我有一个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,但我认为这不会影响任何事情
答案 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)
所有BOOL
值都初始化为NO
(而不是随机),我继续获取NO
的原因是因为我在分配之前一直使用BOOL
权限,而且我已经把它non-atomic
(虽然这在大多数时间都无关紧要)