メモリ管理の注意点

イベントハンドラと循環参照

Sora iOS SDK の各種イベントハンドラをセットする際は、クロージャーにキャプチャーされる変数の循環参照に気をつけてください。 強参照で保持される循環参照はメモリリークの原因になる可能性があります。

以下にメモリリークを回避する例を示します:

class ViewController: UIViewController {

    func connect() {
        let config = Configuration(url: url,
                                   channelId: channelId,
                                   role: .sendrecv,
                                   multistreamEnabled: true)

        // イベントハンドラに渡す self を弱参照にしておくことで本オブジェクトの循環参照を回避します。
        // 強参照にする場合、本オブジェクトがどこからも参照されなくなっても
        // 解放されずにメモリに残り続けてしまう可能性があります。
        config.mediaChannelHandlers.onAddStream = { [weak self] stream in
            // クロージャーの実行時、 self が存在する場合のみ処理を続けます。
            guard let strongSelf = self else {
                return
            }
            if stream.streamId != config.publisherStreamId {
                stream.videoRenderer = strongSelf.receiverVideoView
            }
        }
    }

}
© Copyright 2018-2021, Shiguredo Inc. Created using Sphinx 4.2.0