簡體   English   中英

如何將dispatch_queue_t分配給結構中的變量

[英]How to assign dispatch_queue_t to variable in a structure

我對Objective C還是比較陌生,並且容易被各種類型所迷惑。 我正在使用來自SquareCam示例項目的代碼,該代碼已合並到一個更大的項目中。 它工作正常,但現在我想保存videoDataOutputQueue,它的類型為dispatch_queue_t,以便可以在項目的其他地方使用它。 它必須經過一些C ++代碼,然后才能最終返回目標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>
}

顯然,這不是正確的方法,我不明白自己在做什么。 我從其他帖子中得到了一些提示,但是我缺少了一些東西。

謝謝,肯

您已經使問題變得不必要的難以理解,因為您提供的“代碼”存在語法錯誤。 顯然,這不是您的真實代碼,因此我們無法猜測實際發生的情況。 例如,您使用struct reserved關鍵字,就好像它是一個值一樣。

給定您所說的錯誤訪問發生的位置,這與分派隊列無關。 看起來您的myStruct變量應該是某種結構的指針,但僅僅是垃圾指針。 因此,嘗試向其字段之一分配值最終導致寫入無效的內存地址。 領域的本質並不重要。

問題顯然在您省略為“ <示例代碼中的其他內容>”的代碼中完全正確。 因此,您需要證明這一點。 確實,您需要顯示您的真實代碼。

除此之外, dispatch_queue_t是C類型。 它不是特定於Objective-C的。 因此,您可以在所有基於C的語言中使用它。 無需使用void*

像所有調度對象一樣,調度隊列也被引用計數。 如果要長期參考它,則需要確保它仍然有效。 因此,您需要使用dispatch_retain()保留它。 同樣,在完成使用dispatch_release()時,需要釋放它。 (當您替換另一個引用時,別忘了釋放舊值。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM