将选择器排入运行循环 - 是[NSObject performSelector:withObject:afterDelay:]的方法吗?

MrM*_*age 9 iphone cocoa cocoa-touch objective-c runloop

我希望在当前方法通过并且UI已更新之后执行一个方法.为此,我现在正在使用[object performSelector:@selector(someSelector) withObject:someObject afterDelay:0.0].根据Apple的文档,这会创建一个NSTimer,然后触发并将选择器附加到当前的NSRunLoop.但我不认为这很优雅.有没有一种简单的方法可以直接将选择器排入当前的运行循环,而不会让Cocoa创建一个Timer等?

performSelectorOnMainThread:withObject:waitUntilDone:(如果我在主线程),或者performSelector:onThread:withObject:waitUntilDone:waitUntilDone:NO做我想做的开销更少?

欢呼并提前谢谢

MrMage

Jos*_*zzi 6

可可是事件驱动的.你没有"在当前的运行循环中排队选择器".简单地说:发送到应用程序的事件(用户输入,计时器,网络活动......)导致运行循环运行,这导致在循环运行中发生的事情.当然有"细节",但这是最基本的行为.

如果你想推迟在当前运行循环结束时执行一些选择器,最后调用它,或者要求它在(非常接近的)即将运行的循环中运行.-performSelector:...方法执行此操作的正确方法.他们创建了一个计时器,导致事件发生.

有关更多信息,请参阅" 可可事件处理指南".