我在學習目標-c,但我不明白這一點。我聲明瞭一個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。我更喜歡那個,因爲它不會崩潰。任何建議將非常感謝! 謝謝!
您使用ARC,垃圾回收或保留/發佈的內存管理是什麼? – Mark 2012-03-19 12:51:35