通过dispatch_async块传递可变参数args

时间:2014-08-06 09:17:55

标签: objective-c objective-c-blocks grand-central-dispatch variadic-functions

有没有办法将可变参数args传递给dispatch异步块?在其他的话,我可以将我的va_list传递给disatch_async块吗?

像这样的东西

void someFunction (NSObject * format, ...)
{
  va_list argList;
  va_start(argList, format);
  dispatch_async(some_queue(), ^{  
    // Use it here
  });
  va_end(argList);
}

或者像这样

void someFunction (NSObject * format, ...)
{

  dispatch_async(some_queue(), ^{
    va_list argList;
    va_start(argList, format);  
    // Use it here
    va_end(argList);
  });

}

解决方法是在发送之前将其作为对象,这不是我想要的。

1 个答案:

答案 0 :(得分:2)

va_start将在format(argList)中保留其第一个参数(va_list)地址,然后通过移动指针获取其他参数,但是如果函数({{ 1}})返回,该地址的内存将随时被覆盖,因此访问其值并且结果未定义是危险的。

someFunction