NSOperationQueue mainQueue vs performSelectorOnMainThread?

10,182
[self performSelectorOnMainThread:@selector(doSomething:) 
                       withObject:object 
                    waitUntilDone:NO]

Will perform the selector right when it is called. This is what you have to use if you want to affect the UI from a background thread. If you say YES to waitUntilDone it will block the thread until the method has completed.

mainQueue adds that block to the operation queue of the mainthread but does not guarantee when it will be executed. There could be other items in that queue still waiting to execute.

Share:
10,182

Related videos on Youtube

ma11hew28
Author by

ma11hew28

Updated on June 04, 2022

Comments

  • ma11hew28
    ma11hew28 almost 2 years

    What's the difference between this:

    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [self doSomthing:object];
    }];
    

    and this:

    [self performSelectorOnMainThread:@selector(doSomething:) withObject:object waitUntilDone:NO]
    
  • JohnK
    JohnK almost 11 years
    Very clear explanation; I wonder why the OP hasn't accepted it as the answer. Could you provide a link to the official docs on both techniques?
  • Blitz
    Blitz almost 10 years
    Don't think that this method is synchronous, the answer seems wrong to me.
  • Blitz
    Blitz almost 10 years
    My understanding of the performSelectorOnMainThread with waitUntilDone:NO is that it is executed on the next go around of the run loop, which is the exact same behavior as the mainQueue