Вы не можете проверить, нужно ли вам отменить операцию, если она в блоке.Если он находится в блоке и должен быть отменен, то он отменяется.Доступ к свойствам NSOperation не возможен, потому что блок не является экземпляром NSOperation как таковым.
Пример кода:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSOperationQueue *q = [[NSOperationQueue alloc] init];
[q addOperationWithBlock:^{
[NSThread sleepForTimeInterval:10];
NSLog(@"Block 1");
}];
[q addOperationWithBlock:^{
[NSThread sleepForTimeInterval:3];
NSLog(@"Block 2");
}];
[q cancelAllOperations];
[NSThread sleepForTimeInterval:15];
[pool drain];
return 0;
}
Если вы удалите вызов cancelAllOperations, то блоки сработают так, как вы ожидаете.
Я бы посоветовал вам, если вам нужен более точный контроль состояния отмены операции и взаимодействия с NSOperationQueue, вам лучше использовать NSOperation, а не NSBlockOperation.Для этого вы можете создать подкласс NSOperation.