2012-03-19 9 views
1

私はロール学習の目的でいましたが、私はこれを取得しません。私はnsstring i-varを宣言しています。私はinitメソッドの値を設定して、その後のインスタンスメソッドでそのivarにアクセスすると、予期せずクラッシュしたり動作したりします。NSStringインスタンス変数のクラッシュ

//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

ARC、ガベージコレクション、保持/解放を使用しているメモリ管理はありますか? – Mark

答えて

4

文字列pathForResource:ofType:は自動リリースされています。つまり、「いつか後で」リリースされます。あなたが生きている、それを維持したい場合は、それを保持:

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

そしてdeallocに後でそれを解放することを忘れないでください。

+0

ありがとう!それは働いた – Danny

関連する問題