簡體   English   中英

AudioServicesCreateSystemSoundID和內存地址參數-如何傳遞屬性?

[英]AudioServicesCreateSystemSoundID and Memory Address Argument - How to pass in a property?

我有一個AudioServicesCreateSystemSoundID方法,根據文檔,該方法似乎需要傳入的內存地址(* outSystemSoundID)。

從Apple網站...

OSStatus AudioServicesCreateSystemSoundID (
   CFURLRef       inFileURL,
   SystemSoundID  *outSystemSoundID
);

當我在方法中創建本地對象時,此代碼可以工作。 該對象已正確分配到存儲位置。

這將返回代碼為myTest的代碼:0(這是我想要的)

 SystemSoundID thisSoundID;

 SystemSoundID myTest = AudioServicesCreateSystemSoundID
 (
 (__bridge CFURLRef)(url), &thisSoundID
 );

但是,這就是我想要做的。 (我已將self.theSound設置為SystemSoundID屬性)。

這將返回myTest,錯誤代碼為:4294967246(我不希望這樣)

SystemSoundID myTest = AudioServicesCreateSystemSoundID
(
    (__bridge CFURLRef)(url), self.theSound
);

編譯器將self.theSound轉換為

[self theSound]

其中-(SystemSoundID)theSound是屬性的(自動合成的)getter方法(默認情況下),該方法從_theSound實例變量獲取值。

因此,您不能使用“屬性的地址”並將其傳遞給函數。 可以改為傳遞實例變量的地址:

SystemSoundID myTest = AudioServicesCreateSystemSoundID
(
    (__bridge CFURLRef)(url), &self->_theSound
);

繞過屬性訪問器。 但我建議改用一個臨時變量:

 SystemSoundID thisSoundID;
 SystemSoundID myTest = AudioServicesCreateSystemSoundID
 (
     (__bridge CFURLRef)(url), &thisSoundID
 );
 self.theSound = thisSoundID;

暫無
暫無

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

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