gocoder-sdk-samples-ios
gocoder-sdk-samples-ios copied to clipboard
Retain cycle when starting streaming
WowzaSDK seems to retain reference to WOWZStatusCallback
when calling WowzaGoCoder.startStreaming(_:)
.
Following tutorials, I can pass self
as a callback, but once I do, instance of my class isn't released as I'm keeping reference to WowzaSDK instance..
class Test: NSObject, WOWZStatusCallback {
let goCoder: WowzaGoCoder.sharedInstance()!
func stream() {
goCoder.startStreaming(self) // here self is retained and never released
}
}
reproduces in v1.5.1
quick fix solution ¯\(ツ)/¯
class Test: NSObject, WOWZStatusCallback {
let goCoder: WowzaGoCoder.sharedInstance()!
func stream() {
goCoder.startStreaming(WOWZStatusCallbackProxy(self)) // now everything's fine
}
}
class WOWZStatusCallbackProxy: NSObject, WOWZStatusCallback {
private weak var forwardee: WOWZStatusCallback?
init(forwardee: WOWZStatusCallback?) {
self.forwardee = forwardee
super.init()
}
func onWOWZStatus(_ status: WOWZStatus!) {
forwardee?.onWOWZStatus(status)
}
func onWOWZEvent(_ status: WOWZStatus!) {
forwardee?.onWOWZEvent?(status)
}
func onWOWZError(_ status: WOWZStatus!) {
forwardee?.onWOWZError(status)
}
}
I'm facing the same problem my app is hanged after calling start streaming.i also tried which code is given.