Все примеры / учебные пособия, которые я могу найти в отношении 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 ...