tags:

views:

205

answers:

1

I have a selector and target, and calls the method like this

[target performSelectorOnMainThread:(SEL)selector withObject:nil waitUntilDone:FALSE];

But after I changed it to this, it doesn't work

[target performSelector:(SEL)selector withObject:nil afterDelay:0];

Any ideas?

I don't want to perform that task on the main thread because it lags the UI.

By doesn't work I mean that it simply doesn't call the method. I have it im debu mode in simulator and confirmed that it was not called.

+4  A: 

I assume you're sending the message from another than the main thread. Cocoa just builds a run loop for the main thread, for other threads you have to build one yourself. The method performSelector:withObject:afterDelay: schedules the message for the next pass through the run loop. So if there is none, the message will not be sent.

For your case, why don't you just send [target performSelector:selector withObject:nil];? You dont need a run loop for that and the message will be sent immediately (on the same thread).

Nikolai Ruhe
Life save. That's very tricky, was not documented well at all!
erotsppa