我有幾個計時器按預先確定的時間間隔播放音樂。我試圖找出我是否正確取消它們,因爲我的代碼似乎不工作,因爲下面的例外。iPhone 4 iOS5如何正確取消幾個NSTimers與ARC?
我想所有的計時器添加到一個NSMutableArray,然後簡單地廢止他們中的每一個,以防止他們射擊這樣的:
[playTimers addObject:[NSTimer scheduledTimerWithTimeInterval:reminderDelay target:self selector:@selector(appMusicPlayerPlay:) userInfo:nil repeats:NO]];
我希望停止方法要經過陣列和無效定時器。我應該在計時器上調用removeObject還是更容易重新爲ARC分配數組?
[更新:這裏的糾正解決取消一次都定時器]
-(int)stop
{
[musicPlayer pause];
[self pause];
@try {
for(NSTimer* timer in playTimers)
{
[timer invalidate];
}
}
@catch (NSException *exception) {
NSLog(@"exception: %@",[exception description]);
}
@finally {
[playTimers removeAllObjects]
}
state = kRemoteControlStateStopped;
return state;
}
下面是我試圖刪除的NSMutableArray對象後,在迭代陣列上捕捉異常:
*** Collection <__NSArrayM: 0x5429330> was mutated while being enumerated.
這與ARC沒有任何關係。你會在非ARC中得到同樣的異常。你不能修改for(in)循環中的集合。 –