Fix "objc[59448]: Cannot form weak reference to instance (0x60c000039440) of class RNCallKit. It is possible that this object was over-released, or is in the process of deallocation."
This commit is contained in:
parent
75fe3e3b9d
commit
f64b511682
|
@ -34,9 +34,29 @@ internal final class JMCallKitEmitter: NSObject, CXProviderDelegate {
|
|||
}
|
||||
|
||||
func removeListener(_ listener: JMCallKitListener) {
|
||||
let wrapper = JMCallKitEventListenerWrapper(listener: listener)
|
||||
objc_sync_enter(listeners)
|
||||
listeners.remove(wrapper)
|
||||
// XXX Constructing a new JMCallKitEventListenerWrapper instance in
|
||||
// order to remove the specified listener from listeners is (1) a bit
|
||||
// funny (though may make a statement about performance) and (2) not
|
||||
// really an option because the specified listener may already be
|
||||
// executing its dealloc (like RNCallKit).
|
||||
listeners.forEach {
|
||||
// 1. JMCallKitEventListenerWrapper weakly references
|
||||
// JMCallKitListener so it may be nice to clean
|
||||
// JMCallKitEventListenerWrapperinstances up if they've lost
|
||||
// their associated JMCallKitListener instances (e.g. for
|
||||
// example, because whoever did addListener forgot to
|
||||
// removeListener). Unfortunately, I don't know how to do it
|
||||
// because JMCallKitEventListenerWrapper is a struct.
|
||||
//
|
||||
// 2. XXX JMCallKitEventListenerWrapper implements the weird
|
||||
// equality by JMCallKitListener hash which (1) I don't
|
||||
// understand and (2) I don't know how to invoke without
|
||||
// duplicating.
|
||||
if ($0.hashValue == listener.hash) {
|
||||
listeners.remove($0)
|
||||
}
|
||||
}
|
||||
objc_sync_exit(listeners)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue