Внутри-процессное общение в Цели C - PullRequest
1 голос
/ 07 мая 2011

Я хочу знать, как дочерний поток может общаться с родительским потоком в Objective C. Я порождаю поток из своего основного потока и хочу рассказать основному потоку о каком-либо действии и продолжать работу. Как этого добиться?

Ответы [ 3 ]

2 голосов
/ 07 мая 2011
  • Если вы отправите NSNotification в дочернем потоке, получатель получит уведомление и выполнит в качестве отправителя под the same thread.В документе Apple говорится, что это и помечено как примечание.
  • Информация между потоками может передаваться совместно используемой памятью, например: структура, примитивные типы (int, CGFloat и т. Д.).
  • Информация между потоками может передаваться с помощью свойства threadDictionary NSThread.Я предпочитаю использовать это для регистрации некоторых переменных состояния.Например, при прокрутке я установлю следующее.

    
    NSMutableDictionary *dictInfo = [NSThread mainThread].threadDictionary;
    [dictInfo setObject:[NSNumber numberWithbool:YES] forKey:_kThreadPause];
    

    Рабочий поток перейдет в спящий режим, когда увидит, что для _kThreadPause установлено значение YES.

    <code>
    BOOL bPause = [[[NSThread mainThread].threadDictionary objectForKey:_kThreadPause] boolValue];
    if (bPause) [NSThread sleepForTimeInterval:0.1];
    
  • Как сказал DavidNeiss, вы можете использовать методы NSObject для выполнения селектора в основном или дочернем потоке.

    Если у вас есть время, выможно прочитать Руководство по программированию потоков .

2 голосов
/ 07 мая 2011

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

-(void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
1 голос
/ 07 мая 2011

У вас может быть поток, публикующий NSNotification, который основной поток ожидает (наблюдает), и передает информацию в объект NSNotification.

...