ブロック内にある場合、操作をキャンセルする必要があるかどうかを実際に確認することはできません。ブロック内にあり、キャンセルされることになっている場合は、キャンセルされます。ブロック自体は 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 と相互作用する必要がある場合は、NSBlockOperation ではなく NSOperation を使用することをお勧めします。これを実現するために NSOperation をサブクラス化できます。