@@ -193,10 +193,14 @@ func convertToSwiftDateComponents(from dateComponentsFromJS: DateComponentsFromJ
193193
194194class NativeEventObserver {
195195 let notificationCenter = CFNotificationCenterGetDarwinNotifyCenter ( )
196- let observer : UnsafeRawPointer
196+ private weak var module : BaseModule ?
197+ private var observer : UnsafeRawPointer ?
197198
198199 func registerListener( name: String ) {
199200 let notificationName = name as CFString
201+ guard let observer else {
202+ return
203+ }
200204 CFNotificationCenterAddObserver (
201205 notificationCenter,
202206 observer,
@@ -209,9 +213,11 @@ class NativeEventObserver {
209213 _: CFDictionary ?
210214 ) in
211215 if let observer = observer, let name = name {
212- let mySelf = Unmanaged < BaseModule > . fromOpaque ( observer) . takeUnretainedValue ( )
213-
214- mySelf. sendEvent (
216+ let nativeObserver = Unmanaged < NativeEventObserver > . fromOpaque ( observer) . takeUnretainedValue ( )
217+ guard let module = nativeObserver. module else {
218+ return
219+ }
220+ module. sendEvent (
215221 " onDeviceActivityMonitorEvent " as String ,
216222 [
217223 " callbackName " : name. rawValue
@@ -224,7 +230,8 @@ class NativeEventObserver {
224230 }
225231
226232 init ( module: BaseModule ) {
227- observer = UnsafeRawPointer ( Unmanaged . passUnretained ( module) . toOpaque ( ) )
233+ self . module = module
234+ observer = UnsafeRawPointer ( Unmanaged . passUnretained ( self ) . toOpaque ( ) )
228235 registerListener ( name: " intervalDidStart " )
229236 registerListener ( name: " intervalDidEnd " )
230237 registerListener ( name: " eventDidReachThreshold " )
@@ -234,7 +241,15 @@ class NativeEventObserver {
234241 }
235242
236243 func unregister( ) {
244+ guard let observer else {
245+ return
246+ }
237247 CFNotificationCenterRemoveEveryObserver ( notificationCenter, observer)
248+ self . observer = nil
249+ }
250+
251+ deinit {
252+ unregister ( )
238253 }
239254}
240255
0 commit comments