NSString实例变量崩溃

时间:2012-03-19 12:42:33

标签: objective-c

我正在学习目标-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一样运行。我更喜欢那个,因为它不会崩溃。任何建议将不胜感激!!! 谢谢!

1 个答案:

答案 0 :(得分:4)

字符串pathForResource:ofType:是自动释放的,这意味着它将在“稍后”发布。如果你想让它保持活力,请保留它:

myPath = [[[NSBundle mainBundle] pathForResource:@"stocks" ofType:@"sqlite"] retain];

不要忘记稍后在dealloc中发布它。