Создание подкласса NSOperation для одновременного и отменяемого

Я не могу найти хорошую документацию о том, как создать подкласс NSOperation , чтобы он был параллельным, а также для поддержки отмены. Я читал документацию Apple, но не могу найти «официальный» пример.

Вот мой исходный код:

@synthesize isExecuting = _isExecuting;
@synthesize isFinished = _isFinished;
@synthesize isCancelled = _isCancelled;

- (BOOL)isConcurrent
{
    return YES;
}

- (void)start
{
/* WHY SHOULD I PUT THIS ?
    if (![NSThread isMainThread])
    {
        [self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:NO];
        return;
    }
*/

    [self willChangeValueForKey:@"isExecuting"];
    _isExecuting = YES;
    [self didChangeValueForKey:@"isExecuting"];


    if (_isCancelled == YES)
    {
        NSLog(@"** OPERATION CANCELED **");
    }
    else
    {
        NSLog(@"Operation started.");
        sleep(1);
        [self finish];
    }
}

- (void)finish
{
    NSLog(@"operationfinished.");

    [self willChangeValueForKey:@"isExecuting"];
    [self willChangeValueForKey:@"isFinished"];

    _isExecuting = NO;
    _isFinished = YES;

    [self didChangeValueForKey:@"isExecuting"];
    [self didChangeValueForKey:@"isFinished"];

    if (_isCancelled == YES)
    {
        NSLog(@"** OPERATION CANCELED **");
    }
}

В найденном мной примере я не понимаю, почему используется performSelectorOnMainThread:. Это предотвратит одновременное выполнение моей операции.

Кроме того, когда я закомментирую эту строку, Мои операции выполняются одновременно. Однако флаг isCancelled не изменяется, хотя я вызвал cancelAllOperations .

49
задан dandan78 18 June 2014 в 09:17
поделиться