gpt4 book ai didi

ios - Grand Central Dispatch 无障碍

转载 作者:行者123 更新时间:2023-11-28 19:08:43 27 4
gpt4 key购买 nike

是否可以在没有 block 的情况下使用 GCD?有没有办法像 mikeash 在他的 post 中所说的那样使用 _f 变体来使用 GCD? .我四处寻找,双方都没有证据。是可能还是不可能。

如果可行请举个例子。

/塞尔文

最佳答案

当然可以!对于 _f 变体,Mike 只是指一组带有 _f 后缀的 GCD 函数。它们是通常的 GCD 函数的替代品,但可以接受用户定义的函数作为参数而不是 block 。有很多:

dispatch_async_f
dispatch_sync_f
dispatch_after_f
dispatch_apply_f
dispatch_group_async_f
dispatch_group_notify_f
dispatch_set_finalizer_f
dispatch_barrier_async_f
dispatch_barrier_sync_f
dispatch_source_set_registration_handler_f
dispatch_source_set_cancel_handler_f
dispatch_source_set_event_handler_f

它们接受定义如下的 dispatch_function_t 参数(而不是通常的 dispatch_block_t):

typedef void (*dispatch_function_t)(void*)

如您所见,由于 *void 指针,它可以接受任何用户参数和函数。因此,您甚至可以将 dispatch_function_t 与没有参数的函数一起使用 - 您可以像这样编写一个包装函数:

void func(void) {
//do any calculations you want here
}
void wrapper_function(void*) { func(); }
dispatch_async_f(queue, 0, &wrapper_function);

或者传递一个函数指针作为参数。或者相反,您可以将 GCD 函数的 _f 变体与用户定义的函数一起使用,这些函数可以通过 varargs(可变参数函数)接受任意数量的参数 - 只需为它编写一个函数包装器,就像上面一样。如您所见,_f 函数是一种相当强大的机制,您不仅限于没有 GCD 参数的 block ,还可以使用常用函数。

关于ios - Grand Central Dispatch 无障碍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17811414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com