美文网首页iOS学习开发iOS 开发 iOS Developer
在block间传递c结构体指针地址

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

作者: 睡后3k | 来源:发表于2016-04-06 13:51 被阅读142次

背景

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


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结构体指针地址

    背景 有这样一个函数,它分配空间并把地址传递到指针内容中 在Objective-C 中 如果我们在block外面声...

  • 关于block(一)----clang源码与变量的引用

    block 其实就是一个结构体+函数指针,其赋值就是传递block对象(结构体); 下面代码我们将其转为c的源码,...

  • Go语言学习教程(十一)

    一、结构体指针 * 由于结构体是值类型,在方法传递时希望传递结构体地址,可以使用时结构体指针完成 * 可以结合ne...

  • Block使用注意事项

    block(块)的本质是什么? 在本质上是一个指向结构体的指针,能将函数作为变量、参数来传递。 block通俗点儿...

  • Golang 指针和结构体

    Golang 指针和结构体 于c语言相同,go中也有指针和结构体的概念。指针表示变量的内存地址,结构体用来存储同一...

  • 数组,切片

    值传递:数组,结构体指针(地址)传递:切片,结构体方法 数组 1.元素交换 切片 内存扩容,在内存大小小于1024...

  • 浅谈Block内存管理

    1. block的底层实现原理 block实际上是指向结构体的指针;block传值时:普通的局部变量是值传递,全局...

  • C语言20 结构体指针

    C语言20 结构体指针 探测结构体指针的特性 ++、-- 加法与减法 指针相减 使用结构体指针 结构体指针一定要指...

  • oc block潜入研究

    先放出:官方文档 要想弄懂block的实现方式,我们要从c++入手先总结:block=函数指针+结构体+简单工厂模...

  • JNI总结

    java调用c/c++ 在C中:JNIEnv 结构体指针别名env二级指针 在C++中:JNIEnv 是一个结构体...

网友评论

    本文标题:在block间传递c结构体指针地址

    本文链接:https://www.haomeiwen.com/subject/vecmlttx.html