[英]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.