ฉันกำลังพยายามใช้เธรดแยกต่างหากสำหรับการทำงานกับ 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 และเรียกใช้วิธีการบนวัตถุนั้นจากเธรดเดียวกันตลอดเวลา .