gpt4 book ai didi

iphone - AudioServicesAddSystemSoundCompletion 在 ARC 下使用 __bridge

转载 作者:可可西里 更新时间:2023-11-01 04:19:20 32 4
gpt4 key购买 nike

我希望标题不会太误导... :)

我播放系统声音并像这样向其添加 SoundCompletion-Callback:

AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, completionCallback, (__bridge_retained void *)self);

而 «self» 是一个简单的 NSObject

在完成回调中,我尝试再次调用播放例程:

我必须将 __bridge_transfer 和 __bridge_retained 添加到转换中,否则会出现错误、崩溃或其他意外行为。

但尽管如此,整个事情还是行不通。

我将要播放的声音存储在 NSMutableArray 中,获取数组的第一个条目并播放它,添加声音完成并希望事情发生。但是 - 对于所有保留传输的东西,NSMutableArray 在第二次调用时是空的......

代码如下:

static void completionCallback (SystemSoundID  mySSID, void *myself) {

NSLog(@"Audio callback");

AudioServicesRemoveSystemSoundCompletion (mySSID);
AudioServicesDisposeSystemSoundID(mySSID);

[(__bridge_transfer Speaker *)myself speakCharacter];

CFRelease(myself); // I heard I need this?

}

-(void)speakCharacter{

if([sounds count] > 0){

NSString *soundToPlay = [sounds objectAtIndex:0];
[sounds removeObjectAtIndex:0];
NSLog(@"TxtToSpeak %@", soundToPlay);
CFURLRef soundFileURLRef;
NSURL *path = [[NSBundle mainBundle] URLForResource:[soundToPlay uppercaseString] withExtension:@"aif"];
soundFileURLRef = (__bridge CFURLRef)path;
SystemSoundID soundID;
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, completionCallback, (__bridge_retained void *)self);
AudioServicesPlaySystemSound (soundID);
}
}

[编辑] - 回答我自己的问题:

总是很高兴自己找到它:)

事实证明,我快到了。

设置回调的调用如下:

AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, completionCallback, (__bridge_retained void *)self);

然后,在回调函数中,我这样做:

myClass *theClass = (__bridge myClass *)myself;
CFRelease(myself);
[theClass playNextSound]; // The routine that plays the sounds

它有效...

最佳答案

我无法回答我自己的问题,因为我对 StackOverflow 来说太快了 - 所以为了使这个完整,我再次添加答案:)

事实证明,我快到了。

设置回调的调用如下:

AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, completionCallback, (__bridge_retained void *)self);

然后,在回调函数中,我这样做:

myClass *theClass = (__bridge myClass *)myself;
CFRelease(myself);
[theClass playNextSound]; // The routine that plays the sounds

它有效...

关于iphone - AudioServicesAddSystemSoundCompletion 在 ARC 下使用 __bridge,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9069726/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com