AVSpeechSynthesizer在大约200次调用后停止工作可能是由于内存问题导致的。在每次调用AVSpeechSynthesizer之后,需要及时释放资源,以确保内存不会过多占用。
以下是一个示例代码,展示了如何在每次调用AVSpeechSynthesizer后释放资源:
import AVFoundation
class SpeechSynthesizerDelegate: NSObject, AVSpeechSynthesizerDelegate {
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
// 在每次调用后停止后释放资源
synthesizer.stopSpeaking(at: .immediate)
synthesizer.delegate = nil
}
}
class SpeechManager {
let synthesizer = AVSpeechSynthesizer()
let delegate = SpeechSynthesizerDelegate()
init() {
synthesizer.delegate = delegate
}
func speak(text: String) {
let utterance = AVSpeechUtterance(string: text)
synthesizer.speak(utterance)
}
}
let speechManager = SpeechManager()
for _ in 0..<200 {
speechManager.speak(text: "Hello")
}
在这个示例中,我们创建了一个SpeechManager类来管理AVSpeechSynthesizer的调用。在每次调用AVSpeechSynthesizer后,我们使用stopSpeaking(at:)
方法停止语音合成,并将AVSpeechSynthesizer的delegate属性设置为nil以释放资源。这样可以确保内存不会过多占用,避免在大约200次调用后停止工作的问题。
希望以上解决方法能够帮助到你!