У меня есть объект (Processor
), содержащий несколько методов, которые выполняют длительные вычисления. Я хотел бы использовать эти методы как в основном потоке, так и в подклассах NSOperation
.
Внутри моего NSOperation
кода подкласса я неоднократно называю isCancelled
, поэтому отмена довольно отзывчива. Однако, когда операция вызывает один из этих длинных Processor
методов, она не может ответить на отмену, пока этот метод не вернется.
Есть ли хороший способ написания методов, чтобы их можно было использовать как с операциями, так и без них? Я подумываю добавить аргумент operation
к моим ресурсоемким Processor
методам и написать их так:
- (void)calculateWithOperation:(NSOperation *)operation {
do {
if (operation != nil && [operation isCancelled]) {
return;
}
// Do some more calculation...
} while (! finished);
}
// For convenient main thread execution.
- (void)calculate {
[self calculateWithOperation:nil];
}
Кто-нибудь еще сталкивался с этой проблемой раньше? Есть ли лучший способ?