背景
有这样一个函数,它分配空间并把地址传递到指针内容中
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);
});