Передать объект в NSThread и продолжать отправлять ему сообщения? - PullRequest
1 голос
/ 14 мая 2010

Все примеры / учебные пособия, которые я могу найти в отношении NSThreads, и единственный способ, которым я когда-либо имел дело с ними, - это использование [NSThread detachNewThreadSelector:@selector(processDataMethod) toTarget:self withObject:nil]; для перемещения всей обработки в методе в другой поток с собственным autoreleasePool и т. Д.

Это хорошо для операций «одного выстрела», которые должны просто выполняться и «исчезать».

Мне нужно сделать много небольших вызовов веб-служб в пакетном режиме, и я хотел бы создать объект NSThread, который оставался без изменений на время выполнения приложений. В основном для предотвратить появление множества новых потоков при возникновении очередей.

Я посмотрел на initWithTarget и [NSThread start], которые, кажется, имеют дело с тем, что я пытаюсь сделать. Я просто не уверен, как собрать его вместе, идет ли поток в мой объект, я передаю объект в мой поток и т. Д.

Псевдокодом / объяснением я пытаюсь реализовать это:

MyController;

@interface
NSThread *threadProperty; //a property, holding a thread I would like to message
MyWebService *webServiceObject; //the Class that holds web service methods e.g. - (NSArray*) searchFor:(NSString*) searchStr; 

on viewDidLoad:

instantiate webServiceObject;
instantiate threadProperty;
hand threadProperty the webServiceObject.
start the thread. //make it go forever with [[NSRunLoop currentRunLoop] run];

on user does something:
tell the thread to tell the webServiceObject to searchFor:@"Foo";

on thread has a response:
thread says webServiceObject says there are 19 @"Foo" up in the cloud.

Я возился с тем, как заставить это работать, но понимает, что я не понимаю, субъект достаточно хорошо, чтобы придумать «образец» для его реализации. Я предполагаю, что пытаюсь реализовать кластер вызовов методов для объекта, живущего в отдельном непрерывном потоке, вместо того, чтобы порождать поток каждый раз, когда мне нужен определенный вызываемый метод (потенциально 8 раз подряд в течение 500 мс., А затем не в все за 2 минуты).

Надеюсь, это имеет смысл, и что кто-то, обладающий большим опытом работы с нитями, может указать мне правильное направление.


Этот пост довольно близок к тому, что я пробовал: как использовать executeSelect ...

...