iPhone: how to use performSelector:onThread:withObject:waitUntilDone: method?
Posted
by Michael Kessler
on Stack Overflow
See other posts from Stack Overflow
or by Michael Kessler
Published on 2010-04-06T11:26:00Z
Indexed on
2010/04/10
23:53 UTC
Read the original article
Hit count: 1104
iphone
|multithreading
Hi all,
I am trying to use a separate thread for working with some API.
The problem is that I am not able to use performSelector:onThread:withObject:waitUntilDone:
method with a thread that I' instantiated for this.
My code:
@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"
is never printed.
What am I missing?
I tried to instantiate the thread with target and selector, tried to wait for method execution completion (waitUntilDone:YES
).
Nothing helps.
UPDATE:
I don't need this multithreading for separating costly operations to another thread.
In this case I could use the performSelectorInBackground
as mentioned in few answers.
The main reason for this separate thread is the need to perform all the actions in the API (TTS by Loquendo) from one single thread.
Meaning that I have to create an instance of the TTS object and call methods on that object from the same thread all the time.
© Stack Overflow or respective owner