在block间传递c结构体指针地址

背景

有这样一个函数,它分配空间并把地址传递到指针内容中


void foo(MyStruct **myStruct) {
  //malloc
  // (*myStruct) = balabla
}

在Objective-C 中

如果我们在block外面声明MyStruct, 然后在block 中调用foo 办法, 系统将会提示找不到foo函数


MyStruct *myStruct = NULL;
dispatch_async(dispatch_get_main_queue(), ^{
    foo(&myStruct)
});

原因很简单, 在block传递到dispatch_async时, block 会拷贝到堆上, 由于block引用了外部变量, myStruct会被struct 包装一下, 所以在&myStruct并不是MyStruct 的 **类型

解决方法

MyStruct *myStruct = NULL;
dispatch_async(dispatch_get_main_queue(), ^{
    MyStruct *myStructTmp = myStruct;
    foo(&myStructTmp);
});

你可能感兴趣的:(在block间传递c结构体指针地址)