gpt4 book ai didi

iphone - AudioServicesAddSystemSoundCompletion 回调方法在几次调用后没有被调用

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:28 25 4
gpt4 key购买 nike

我在我的应用程序中使用 AudioServicesAddSystemSoundCompletion 来检测声音何时结束,然后触发其他一些操作。出于某种原因,我得到以下行为,它适用于前 8 到 12 个声音(至少我测试过),然后不再调用为 AudioServicesAddSystemSoundCompletion 定义的回调。

这是我创建声音的代码:

NSString *soundPath = [[NSBundle mainBundle] pathForResource:[[soundFileName componentsSeparatedByString:@"."]objectAtIndex:0]ofType:@"wav"];
Log2(@"soundFileName: %@", soundFileName);
CFURLRef soundURL = (CFURLRef)[NSURL fileURLWithPath:soundPath];
AudioServicesCreateSystemSoundID(soundURL, &sound);
AudioServicesAddSystemSoundCompletion(sound, nil, nil, playSoundFinished, (void*) self);

播放声音:

AudioServicesPlaySystemSound(sound);

并在声音播放完毕后做一些事情:

void playSoundFinished (SystemSoundID sound, void *data) {
pf //Typedef for PRETTY_FUNCTION log

AudioServicesRemoveSystemSoundCompletion(sound);
[AppState sharedInstance].b_touchesFREE = TRUE;

if([[AppState sharedInstance].ma_cardsToCheck count] >= 2)
{
[[AppState sharedInstance].vc_spiel pairFound];
}

if (((Card*)data).b_isTurnedFaceUp) {
[AppState sharedInstance].i_cardsTurnedFaceUp --;
}

[(Card*)data release];
}

你们中有人知道为什么它在前几次工作然后就停止工作了吗?

提前致谢。特立独行

***** 编辑 *****我刚刚发现,当我尝试第二次播放声音时会发生这种情况。难道是我忘记在某个地方发布它了吗?但我一直认为 AudioServicesRemoveSystemSoundCompletion 处理内存管理。

***** 再编辑一次 *****所以在 Stackoverflow 上发布这个让我对这个问题有了更深入的思考,现在我得到了解决方案(至少我认为我得到了 ;))。不幸的是,我无法在接下来的 7.5 小时内自己回答问题,因此我必须编辑问题。

只是为了让你更好地理解我的问题。

我正在编写一个内存游戏,每张卡片都是一个类,其中包含正面和背面的图像以及旋转时播放的声音。因为我只在创建卡时初始化声音,所以我不确定每次声音结束时是否应该调用 AudioServicesRemoveSystemSoundCompletion。

所以我只是在没有 AudioServicesRemoveSystemSoundCompletion 的情况下尝试了它,现在它可以工作了。

我现在唯一不确定的是这是否会导致内存泄漏或类似问题。但目前它工作正常。

如果有人能告诉我这在内存使用方面是否合适,我会非常高兴。 :)

最好的问候。特立独行

最佳答案

如果您在应用程序的生命周期内只创建一次声音(并设置声音完成),从内存管理的角度来看应该没问题。始终是您创建 - 您发布。

但是,你应该调用

AudioServicesRemoveSystemSoundCompletion(sound);
AudioServicesDisposeSystemSoundID(sound);

当您不再需要声音时(很可能是在您创建(或保持引用)声音的对象的 dealloc 方法中。不要更改这两个的顺序,否则会发生内存泄漏。

也许你会发现AppSoundEngine有用。为 SystemSoundID 和关联的 C 函数使用包装器很简单。

关于iphone - AudioServicesAddSystemSoundCompletion 回调方法在几次调用后没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6410143/

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