我正在学习目标-c,但我不知道这个。我正在声明一个nsstring i-var,我在init方法中设置了值,然后当我在稍后的实例方法中访问该ivar时,它崩溃或行为不可预测。
//heres what my declaration looks like
@interface StockData : CCNode {
NSString *myPath;
NSString *myPath2;
}
-(id) init
{
if ( (self = [super init]) ){
myPath = [[NSBundle mainBundle] pathForResource:@"stocks" ofType:@"sqlite"];
myPath2 = @"test";
CCLOG(@"mypath::::%@",[myPath class]);
CCLOG(@"mypath2::::%@",[myPath2 class]);
}
return self;
}
-(void) getChunk{
CCLOG(@"mypath_getchunk::::%@",[myPath class]);//this crashes
CCLOG(@"mypath2_getchunk::::%@", [myPath2 class]);//this doesn't
....
我正在使用cocos2d,我在这样的预定更新方法中调用了getChunk方法:
-(void) updateOncePerSecond:(ccTime)delta{
if(!sd){
sd = [StockData initStockData];
[self addChild:sd];
}
[sd getChunk];
NSLog([sd getDate]);
}
第一次迭代我得到了这个:
2012-03-19 20:33:58.591 HelloWorld [6777:10a03] mypath_getchunk :::: __ NSCFString
2012-03-19 20:33:58.591 HelloWorld [6777:10a03] mypath2_getchunk :::: __ NSCFConstantString
第二次迭代(如果它没有崩溃):
2012-03-19 20:33:59.589 HelloWorld [6777:10a03] mypath_getchunk :::: NSMallocBlock
2012-03-19 20:33:59.589 HelloWorld [6777:10a03] mypath2_getchunk :::: __ NSCFConstantString
为什么它有时会崩溃,而不是其他时候。为什么会变成mallocblock?是NSString的错误,还是我做错了。其他变量似乎工作正常?如何让我的NSCFString像NSCFConstantString一样运行。我更喜欢那个,因为它不会崩溃。任何建议将不胜感激!!! 谢谢!
答案 0 :(得分:4)
字符串pathForResource:ofType:
是自动释放的,这意味着它将在“稍后”发布。如果你想让它保持活力,请保留它:
myPath = [[[NSBundle mainBundle] pathForResource:@"stocks" ofType:@"sqlite"] retain];
不要忘记稍后在dealloc
中发布它。