我將下面顯示的代碼更改爲ARC兼容。如何正確使用__bridge ARC_
我只是將其更改爲Xcode的建議,並且它不會在Xcode上顯示錯誤。但是一旦事件發生,代碼就會崩潰。有人有想法解決這個問題嗎?
我不確定這個暗戀是否因爲acapela SDK而發生,或者不是。
這是非ARC代碼,它工作正常。
void MyInterruptionListener(void *inClientData, UInt32 inInterruptionState) {
AcapelaSpeech* anAcapelaSpeech = *(AcapelaSpeech**)inClientData;
if (inInterruptionState == kAudioSessionBeginInterruption) {
[anAcapelaSpeech setActive:NO];
status = AudioSessionSetActive(NO);
}
if (inInterruptionState == kAudioSessionEndInterruption) {
status = AudioSessionSetActive(YES);
[anAcapelaSpeech setActive:YES];
}
}
這是ARC兼容,但它壓碎上[anAcapelaSpeech SETACTIVE:NO] ;.
void MyInterruptionListener(void *inClientData, UInt32 inInterruptionState) {
AcapelaSpeech* anAcapelaSpeech = (__bridge_transfer AcapelaSpeech*)inClientData;
if (inInterruptionState == kAudioSessionBeginInterruption) {
[anAcapelaSpeech setActive:NO];
AudioSessionSetActive(NO);
}
if (inInterruptionState == kAudioSessionEndInterruption) {
AudioSessionSetActive(YES);
[anAcapelaSpeech setActive:YES];
}
}
附加信息。 我正在使用Acapela音頻SDK,音頻中斷代碼顯示在這PDF的中斷。 http://www.ecometrixem.com/cms-assets/documents/44729-919017.acapela-for-iphone.pdf
這是粉碎的截圖。
解決 此代碼的工作,謝謝。
void MyInterruptionListener(void *inClientData, UInt32 inInterruptionState) {
AcapelaSpeech *anAcapelaSpeech = (__bridge id) (*(void **) inClientData);
if (inInterruptionState == kAudioSessionBeginInterruption) {
[anAcapelaSpeech setActive:NO];
AudioSessionSetActive(NO);
}
if (inInterruptionState == kAudioSessionEndInterruption) {
AudioSessionSetActive(YES);
[anAcapelaSpeech setActive:YES];
}
}
__bridge_retained是CF對象和對象需要參考要保持他們。 __bridge用於不需要保留的NSObject。 – CodaFi 2012-04-06 23:41:48
感謝您的解釋。 :) – 2012-04-07 01:02:41