關於爲什麼下面指出的行將引發異常的任何線索?例外 - 數組檢查的邊界是不對的?
-(double)calibrationValueAtIndex:(int)index
{
NSLog(@"count: %d index: %d",[theTopValues count], index);
return [[theTopValues objectAtIndex:index] doubleValue]; // exception happening here
}
2012-07-23 21:51:16.448 TestAppTimerAndHits[15130:f803] count: 9 index: 7
2012-07-23 21:51:22.339 TestAppTimerAndHits[15130:f803] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSOrderedSetM objectAtIndex:]: index 7 beyond bounds [0 .. 4]'
怎麼能在該行的NSLog 9計數之前,則在異常報告說,邊界是[0 .. 4]
?
異常似乎是隨機拋出的..在某些情況下,數組邊界是好的,這意味着我可以在索引8處獲得對象...但是有些時候,它會報告範圍低至[0 .. 2]
?
鑑於控制器(僅VC一個項目中的)
theBufferManager = [[HitBufferManager的alloc] INIT];
在.h文件中: @property NSMutableOrderedSet * theTopValues;
在.m文件: @synthesize theTopValues;對於HitBufferManager的(id)初始化: theTopValues = [NSMutableOrderedSet orderedSetWithCapacity:numToStore]; //返回一個自動發佈的版本。
中的各個項目添加/編輯:
[self sortTopValues];
if([theTopValues count]<numToStore)
{
[theTopValues addObject:[NSNumber numberWithDouble:windowVal]];
}
else if(logVal> [[theTopValues objectAtIndex:0] doubleValue])
{
[theTopValues replaceObjectAtIndex:0 withObject:[NSNumber numberWithDouble:logVal]];
}
這不是一個多線程程序的片段,是嗎? – dasblinkenlight 2012-07-23 20:09:58
我想知道...並想知道我是否在內存管理方面做了一些錯誤。我猜測出於某種原因,數組中的元素正在被垃圾收集?它是一個iOS/iPhone應用程序,我沒有做任何事情來使它成爲多線程,但它是我的第一個應用程序,所以我可能不知道它試圖多線程的東西嗎? – DoYouLikeHam 2012-07-23 20:21:45
如果是iOS版本,則不存在GC,只有裁判計數。不過,你可能有一個懸而未決的參考。你用ARC嗎? – dasblinkenlight 2012-07-23 20:32:41