Я пытаюсь использовать отдельный поток для работы с некоторыми 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
).
Ничего не помогает.
ОБНОВЛЕНИЕ:
Мне не нужна эта многопоточность для разделения дорогостоящих операций на другой поток.
В этом случае я мог бы использовать performSelectorInBackground
, как упоминалось в нескольких ответах.
Основная причина для этого отдельного потока заключается в необходимости выполнять все действия в API (TTS от Loquendo) из одного потока.
Это означает, что я должен создать экземпляр объекта TTS и все время вызывать методы для этого объекта из одного и того же потока. .