Я пытаюсь использовать отдельный поток для работы с некоторым API.
Проблема в том, что я не могу использовать метод performSelector:onThread:withObject:waitUntilDone:
с потоком, для которого я создан.
Мой код:
@interface MyObject : NSObject {
NSThread *_myThread;
}
@property(nonatomic, retain) NSThread *myThread;
@end
@implementation MyObject
@synthesize myThread = _myThread;
- (NSThread *)myThread {
if (_myThread == nil) {
NSThread *myThreadTemp = [[NSThread alloc] init];
[myThreadTemp start];
self. myThread = myThreadTemp;
[myThreadTemp release];
}
return _myThread;
}
- (id)init {
if (self = [super init]) {
[self performSelector:@selector(privateInit:) onThread:[self myThread] withObject:nil waitUntilDone:NO];
}
return self;
}
- (void)privateInit:(id)object {
NSLog(@"MyObject - privateInit start");
}
- (void)dealloc {
[_myThread release];
_myThread = nil;
[super dealloc];
}
@end
"MyObject - privateInit start"
никогда не печатается.
Чего мне не хватает?
Я пытался создать экземпляр потока с целью и селектором, пытался дождаться завершения выполнения метода (waitUntilDone:YES
).
Ничего не помогает.
UPDATE:
Мне не нужна эта многопоточность для разделения дорогостоящих операций на другой поток.
В этом случае я мог бы использовать performSelectorInBackground
, как упоминалось в нескольких ответах.
Основной причиной этого отдельного потока является необходимость выполнения всех действий в API (TTS от Loquendo) из одного потока.
Это означает, что мне нужно постоянно создавать экземпляр объекта TTS и вызывать методы для этого объекта из одного и того же потока.