如何将dispatch_queue_t分配给结构中的变量
How to assign dispatch_queue_t to variable in a structure
我对Objective C还比较陌生,很容易被各种类型所混淆。我使用的是SquareCam示例项目中的代码,该项目包含在一个更大的项目中。它工作得很好,但现在我想保存videoDataOutputQueue,它的类型是dispatch_queue_t,这样我就可以在项目的其他地方使用它。它必须通过一些C++代码才能最终返回到Objective C代码中。因此,我试图将其添加到我已经拥有的结构中,作为void*(void*videoDataOutputQueue;)
然而,我还没有找到正确的方法来分配它,而不会出现EXC_BAD_ACCESS运行时错误。既然dispatch_queue_t是一个C++对象,我不能只使用它的地址吗?
declared in the interface for squarecamviewcontroller:
@interface SquareCamViewController : UIViewController <UIGestureRecognizerDelegate, AVCaptureVideoDataOutputSampleBufferDelegate,UIActionSheetDelegate>
{
AVCaptureVideoPreviewLayer *previewLayer;
AVCaptureVideoDataOutput *dataOutput;
AVCaptureVideoDataOutput *videoDataOutput;
dispatch_queue_t videoDataOutputQueue;
<other stuff>
}
代码的后面部分:
- (void)setupAVCapture
{
<other stuff from the sample code>
MYSTRUCT myStruct = (MYSTRUCT)struct; // make a pointer to the structure
myStruct->videoDataOutputQueue = (void *)videoDataOutputQueue; <<<- bad access here at runtime
<other stuff>
}
很明显,这不是正确的方式,我不明白我在做什么。我从其他帖子中得到了一些提示,但我遗漏了一些东西。
谢谢,Ken
由于您提交的"代码"存在语法错误,您的问题变得不必要地难以理解。这显然不是你真正的代码,所以我们无法猜测到底应该发生什么。例如,您使用struct
保留关键字,就好像它是一个值一样。
考虑到您所说的坏访问发生在哪里,这与调度队列无关。看起来myStruct
变量应该是指向某种结构的指针,但它只是一个垃圾指针。因此,试图将值分配给其中一个字段的操作最终会写入一个无效的内存地址。这个领域的性质并不重要。
问题显然恰恰出现在您作为"<示例代码中的其他东西>"而忽略的代码中。所以,你需要证明这一点。事实上,您需要展示您的真实代码。
除此之外,dispatch_queue_t
是一个C类型。它不是Objective-C特有的。因此,您可以在所有基于C的语言中使用它。没有必要使用void*
。
与所有调度对象一样,调度队列也是引用计数的。如果你要长期参考它,你需要确保它保持活力。因此,您需要使用dispatch_retain()
保留它。同样,您需要在使用完dispatch_release()
后释放它。(当你用另一个引用替换你保留的引用时,不要忘记释放旧值。)
- 在类构造函数中使用结构变量
- 在类构造函数中定义结构变量的参数
- 为什么我们再次从结构对象创建结构变量?
- 如何从其他结构访问受保护的结构变量
- 指向结构变量的指针未保存到eeprom
- 为什么我的程序没有更改结构变量中的值?
- 在 CPP 中初始化 typedef 结构变量
- 带有大结构变量的 CUDA 内核函数给出了错误的结果
- 有没有办法初始化不涉及编写构造函数的新结构变量?
- 结构变量查询
- 在结构声明的分号之前声明的结构变量是否为全局变量
- C++ 如何访问指针的结构变量
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 为什么在 sizeof() 函数中与 * 运算符一起使用和不使用 * 运算符时,指向结构变量的指针大小会有所不同?
- 如何在类别内的类中访问类中的结构变量
- 尝试使用文本文件初始化多个结构变量
- 从类对象到结构变量的 memcpy
- C++结构变量初始化时出现问题
- 如何在 C++ 中使用带有类/结构变量的列表
- 动态数组添加元素而不创建结构变量/对象