diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm index 013e892873d25f..5695ef23c7a9e7 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController.mm @@ -313,7 +313,7 @@ - (void)_controllerResumed - (void)shutdown { - // Subclass hook; nothing to do. + [self _clearDeviceControllerDelegates]; } - (nullable NSNumber *)controllerNodeID @@ -671,6 +671,14 @@ - (void)removeDeviceControllerDelegate:(id)delegate } } +- (void)_clearDeviceControllerDelegates +{ + @synchronized(self) { + _strongDelegateForSetDelegateAPI = nil; + [_delegates removeAllObjects]; + } +} + // Iterates the delegates, and remove delegate info objects if the delegate object has dealloc'ed // Returns number of delegates called - (NSUInteger)_iterateDelegateInfoWithBlock:(void (^_Nullable)(MTRDeviceControllerDelegateInfo * delegateInfo))block diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index 42ee83d5234ef7..eb7881bfd11d21 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -418,6 +418,7 @@ - (void)shutdown return; } [self finalShutdown]; + [super shutdown]; } - (void)finalShutdown