作爲替代的NSTimer,在iOS 4.0+和10.6 +,你可以使用大中央調度和調度資源,以做到這一點使用的塊。蘋果已經爲這個在他們Concurrency Programming Guide下面的代碼:
dispatch_source_t CreateDispatchTimer(uint64_t interval, uint64_t leeway, dispatch_queue_t queue, dispatch_block_t block)
{
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
if (timer)
{
dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), interval, leeway);
dispatch_source_set_event_handler(timer, block);
dispatch_resume(timer);
}
return timer;
}
然後,您可以設置使用如下代碼一秒的計時器事件:
dispatch_source_t newTimer = CreateDispatchTimer(1ull * NSEC_PER_SEC, (1ull * NSEC_PER_SEC)/10, dispatch_get_main_queue(), ^{
[self setX:someValue andY:otherValue andObject:obj];
});
只要你儲存和釋放你的計時器完成後。這甚至可以讓你觸發一個定時器,通過使用併發隊列而不是上面使用的主隊列來在後臺線程上執行項目。
這可以避免需要裝箱和取消裝箱參數。
看看這個qu http://stackoverflow.com/questions/1349740/arguments-in-selector/ – 2009-10-06 19:08:59
評論是答案...... – 2009-10-06 19:13:39