I want to know how to call my function
on the main thread.
How do I make sure my function
is called on the main thread?
(this follows a previous question of mine).
I want to know how to call my function
on the main thread.
How do I make sure my function
is called on the main thread?
(this follows a previous question of mine).
there any rule I can follow to be sure that my app executes my own code just in the main thread?
Typically you wouldn't need to do anything to ensure this — your list of things is usually enough. Unless you're interacting with some API that happens to spawn a thread and run your code in the background, you'll be running on the main thread.
If you want to be really sure, you can do things like
[self performSelectorOnMainThread:@selector(myMethod:) withObject:anObj waitUntilDone:YES];
to execute a method on the main thread. (There's a GCD equivalent too.)
This will do it:
[[NSOperationQueue mainQueue] addOperationWithBlock:^ {
//Your code goes in here
NSLog(@"Main Thread Code");
}];
When you're using iOS >= 4
dispatch_async(dispatch_get_main_queue(), ^{
//Your main thread code goes in here
NSLog(@"Im on the main thread");
});
dispatch_sync
on a background thread, but you will run into a deadlock if you call dispatch_sync
on the main thread with dispatch_get_main_queue
–
Ludhiana there any rule I can follow to be sure that my app executes my own code just in the main thread?
Typically you wouldn't need to do anything to ensure this — your list of things is usually enough. Unless you're interacting with some API that happens to spawn a thread and run your code in the background, you'll be running on the main thread.
If you want to be really sure, you can do things like
[self performSelectorOnMainThread:@selector(myMethod:) withObject:anObj waitUntilDone:YES];
to execute a method on the main thread. (There's a GCD equivalent too.)
i think this is cool, even tho in general its good form to leave the caller of a method responsible for ensuring its called on the right thread.
if (![[NSThread currentThread] isMainThread]) {
[self performSelector:_cmd onThread:[NSThread mainThread] withObject:someObject waitUntilDone:NO];
return;
}
© 2022 - 2024 — McMap. All rights reserved.
[NSObject performSelectorOnMainThread]
can be considered safe. Otherwise if the object just calls[NSObject performSelector]
your delegate methods are running in the context of the caller's thread. – Parthenos