Я работаю над проектом iOS, который должен работать с iOS4. У меня есть NSOperationQueue, и я добавляю операцию. Основной метод операции выглядит примерно так:
-(void)main
{
[self.client getStuffSuccess:^(Stuff *s) {
//Do something on success
} failure:^(NSError *error) {
//Do something on failure
}
}
Код внутри блока будет вызываться только тогда, когда getStuff вызывает успех или неудачу. Я думал, что в это время моя операция будет удалена из NSOperationQueue и блок не будет вызван. Однако, я проверил это, и блок был фактически назван. Он вызывается независимо от того, вызывает ли клиент блок успеха в dispatch_get_main_queue или в потоке, который его вызвал - в данном случае операция выше.
Перед вызовом блока метод isFinished фактически возвращает true (я переопределил метод isFinished и проверил значение), поэтому кто-то может объяснить мне, как это возможно, что блок вызывается?
Я спрашиваю все это, потому что, хотя это прекрасно работает для одного вызова, когда я добавляю его в цикле из нескольких сотен итераций, я получаю EXC_BAD_ACCESS, и понимание вышеизложенного может помочь мне в отладке.