Вызов задержанного executeSelector: на статическом экземпляре из NSThread? - PullRequest
0 голосов
/ 11 апреля 2011

HI, у меня есть статический NSMutableArray * staticArray в подклассе NSOperation (в myOperation.m) и метод:

статический NSMutableArray * staticArray = nil;

+ (void) initialize {

staticArray = [[NSMutableArray alloc] init];

}

-(void) addStrToStaticArray:(NSString*)aStr {
    if([staticArray indexOfObject:aStr] == NSNotFound) {
        [staticArray addObject:aStr];
        [staticArray performSelector:@selector(removeObject:)
                          withObject:aStr
                          afterDelay:30.];
    }
}

Я вызываю вышеуказанный метод и после этого операция завершает выполнение.Проблема в том, что aStr никогда не удаляется из массива.Что мне не хватает?Спасибо ...

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

Основываясь на предложениях Джастина, я теперь могу отложить удаление объекта из массива, вызывая метод изнутри NSThread, NSOperation, несмотря на их существование на момент удаления:удаляется из staticArray через 90 секунд.Подробнее ...

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DistrObjects/Tasks/invocations.html

0 голосов
/ 11 апреля 2011

используйте для этого таймер (CFRunLoopTimer / NSTimer) и api цикла выполнения (CFRunLoop / NSRunLoop).

в этом случае вы создаете таймер и добавляете его в основной цикл выполнения.

для этого также потребуется создать функцию или метод для вызова таймера.если вы выбираете метод, вы можете вместо этого использовать NSInvocation (если это то, что вы предпочитаете).

, поскольку данные статические, а операция (предположительно) не существует, вы можете отправлять сообщения через метод класса.

...