NSInvocationOperation вопрос - PullRequest
       18

NSInvocationOperation вопрос

0 голосов
/ 12 февраля 2011

В моем приложении Cocoa Mac есть метод, который просматривает все подписанные каналы в PubSub Client моего приложения и помечает все записи как прочитанные.

Логика выглядит примерно так ...

NSArray *feeds = [[PSClient applicationClient]feeds];

for(PSFeed *feed in feeds)
{
    for(PSEntry *entry in [feed entries])
    {
        entry.read = NO;
    }
}

Если имеется большое количество непрочитанных каналов, может потребоваться некоторое время, чтобы просмотреть их все (условно говоря).Я хотел бы, чтобы пользователь мог выполнять другие действия, такие как прокрутка статей, в то время как другие вещи происходят в фоновом режиме.Поэтому у меня есть настройка NSInvocationOperation для вызова метода, например ...

NSInvocationOperation *opr = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(markAllReadOperation) object:nil];
[que addOperation:opr];
[opr release];

Приложение все еще испытывает серьезные замедления во время работы цикла.И пользовательский интерфейс почти не отвечает.Я что-то упускаю с NSInvocationOperation или моя логика просто медленная?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2011

Если ваш пользовательский интерфейс не отвечает, значит, что-то работает в главном потоке. Вы не используете mainQueue вы?

Я думаю, что вам лучше всего использовать инструменты, чтобы точно определить, какой код вызывает замедление, используя инструмент Time Profiler.

0 голосов
/ 12 февраля 2011

Звучит как работа для ... Grand Central Dispatch!

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        [obj enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            [obj setRead:NO];
        }];
    }];
});

Конечно, Grand Central Dispatch (и блоки) были введены в Mac OS X 10.6, поэтому их нельзя будет использовать, если вам требуется поддержка более старых версий OS X.

...