[Darwin] MTRDeviceConnectivityMonitor should weakify before using self in a handler block (#33395)

diff --git a/src/darwin/Framework/CHIP/MTRDeviceConnectivityMonitor.mm b/src/darwin/Framework/CHIP/MTRDeviceConnectivityMonitor.mm
index 0d65304..229d95d 100644
--- a/src/darwin/Framework/CHIP/MTRDeviceConnectivityMonitor.mm
+++ b/src/darwin/Framework/CHIP/MTRDeviceConnectivityMonitor.mm
@@ -148,19 +148,26 @@
             return;
         }
         nw_connection_set_queue(connection, sSharedResolverQueue);
+        mtr_weakify(self);
         nw_connection_set_path_changed_handler(connection, ^(nw_path_t _Nonnull path) {
-            nw_path_status_t status = nw_path_get_status(path);
-            if (status == nw_path_status_satisfied) {
-                MTR_LOG_INFO("%@ path is satisfied", self);
-                std::lock_guard lock(sConnectivityMonitorLock);
-                [self _callHandler];
+            mtr_strongify(self);
+            if (self) {
+                nw_path_status_t status = nw_path_get_status(path);
+                if (status == nw_path_status_satisfied) {
+                    MTR_LOG_INFO("%@ path is satisfied", self);
+                    std::lock_guard lock(sConnectivityMonitorLock);
+                    [self _callHandler];
+                }
             }
         });
         nw_connection_set_viability_changed_handler(connection, ^(bool viable) {
-            if (viable) {
-                std::lock_guard lock(sConnectivityMonitorLock);
-                MTR_LOG_INFO("%@ connectivity now viable", self);
-                [self _callHandler];
+            mtr_strongify(self);
+            if (self) {
+                if (viable) {
+                    std::lock_guard lock(sConnectivityMonitorLock);
+                    MTR_LOG_INFO("%@ connectivity now viable", self);
+                    [self _callHandler];
+                }
             }
         });
         nw_connection_start(connection);