为什么我需要为音频创建sharedInstance?

时间:2015-04-02 03:06:27

标签: ios swift ios8 singleton

在我的代码中,我初始化了两个单身人士。我有var session = AVAudioSession.sharedInstancevar audioSession = AVAudioSession.sharedInstance。然后我setActive(false)为第二个单身人士。为什么我需要创建第二个?而不是创建第二个单例,为什么我不能将第一个单例设置为setActive(false)

我相信这是因为单身人士每班只能有一个实例;但是,我只是关闭音频会话,所以我不明白为什么我需要两个单例才能做到这一点。

@IBAction func recordAudio(sender: UIButton) {
    recordButton.enabled = false
    stopButton.hidden = false
    recordAudioOutlet.hidden = false

    //Get a file path to store the audio recording
    let dirPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String

    let currentDateTime = NSDate()
    let formatter = NSDateFormatter()
    formatter.dateFormat = "ddMMyyyy-HHmmss"
    let recordingName = formatter.stringFromDate(currentDateTime)
    let pathArray = [dirPath, recordingName]
    let filePath = NSURL.fileURLWithPathComponents(pathArray)
    println(filePath)

    //Setup audio session
    var session = AVAudioSession.sharedInstance()
    session.setCategory(AVAudioSessionCategoryPlayAndRecord, error: nil)

    //Initialize and prepare the recorder
    audioRecorder = AVAudioRecorder(URL: filePath, settings: nil, error: nil)
    audioRecorder.meteringEnabled = true
    audioRecorder.record()
}

@IBAction func stopAudio(sender: UIButton) {
    //Stop recording the user's voice
    recordAudioOutlet.hidden = true
    audioRecorder.stop()
    var audioSession = AVAudioSession.sharedInstance();
    audioSession.setActive(false, error: nil)
}
}

1 个答案:

答案 0 :(得分:3)

AVAudioSession是一个单独的过程,无法播放(或录制)2个不同的音频。 如果您从应用程序启动音频,则正在运行的音频(如果您正在收听音乐)将暂停。 你为什么不只做一个(class} variable来管理AVAudiosession

如果你创建变量2次,那么它就是一样的(因为singleton总是返回相同的实例)。