Saya mencoba menggunakan utas terpisah untuk bekerja dengan beberapa API.
Masalahnya adalah saya tidak dapat menggunakan metode performSelector:onThread:withObject:waitUntilDone:
dengan thread yang saya buat untuk ini.
Kode saya:
@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"
tidak pernah dicetak.
Apa yang saya lewatkan?
Saya mencoba membuat instance thread dengan target dan pemilih, mencoba menunggu penyelesaian eksekusi metode (waitUntilDone:YES
).
Tidak ada yang membantu.
PEMBARUAN:
Saya tidak memerlukan multithreading ini untuk memisahkan operasi mahal ke thread lain.
Dalam hal ini saya bisa menggunakan performSelectorInBackground
seperti yang disebutkan dalam beberapa jawaban.
Alasan utama untuk thread terpisah ini adalah kebutuhan untuk melakukan semua tindakan di API (TTS oleh Loquendo) dari satu thread.
Artinya saya harus membuat instance objek TTS dan memanggil metode pada objek tersebut dari thread yang sama sepanjang waktu .