diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m
index 470d4f4c76132217d91f6914503f46c4dfd5bd3b..85d141aa097ec2fe304afe1950224d6a97ce52cc 100644
--- a/src/objective-c/GRPCClient/GRPCCall.m
+++ b/src/objective-c/GRPCClient/GRPCCall.m
@@ -409,9 +409,26 @@ static NSMutableDictionary *callFlags;
     _state = GRXWriterStateStarted;
   }
 
+  // Create a retain cycle so that this instance lives until the RPC finishes
+  // (or is cancelled). This makes RPCs in which the call isn't externally
+  // retained possible (as long as it is started before being autoreleased).
+  // Care is taken not to retain self strongly in any of the blocks used in this
+  // implementation, so that the life of the instance is determined by this
+  // retain cycle.
+  _retainSelf = self;
+
+  _responseWriteable =
+      [[GRXConcurrentWriteable alloc] initWithWriteable:writeable];
+
+  _wrappedCall = [[GRPCWrappedCall alloc] initWithHost:_host path:_path];
+  NSAssert(_wrappedCall, @"Error allocating RPC objects. Low memory?");
+
+  [self sendHeaders:_requestHeaders];
+  [self invokeCall];
+
   // TODO(jcanizales): Extract this logic somewhere common.
   NSString *host =
-      [NSURL URLWithString:[@"https://" stringByAppendingString:_host]].host;
+  [NSURL URLWithString:[@"https://" stringByAppendingString:_host]].host;
   if (!host) {
     // TODO(jcanizales): Check this on init.
     [NSException raise:NSInvalidArgumentException
@@ -423,34 +440,17 @@ static NSMutableDictionary *callFlags;
     typeof(self) strongSelf = weakSelf;
     if (strongSelf) {
       [strongSelf
-          finishWithError:[NSError errorWithDomain:kGRPCErrorDomain
-                                              code:GRPCErrorCodeUnavailable
-                                          userInfo:@{
-                                            NSLocalizedDescriptionKey :
-                                                @"Connectivity lost."
-                                          }]];
+       finishWithError:[NSError errorWithDomain:kGRPCErrorDomain
+                                           code:GRPCErrorCodeUnavailable
+                                       userInfo:@{
+                                                  NSLocalizedDescriptionKey :
+                                                    @"Connectivity lost."
+                                                  }]];
     }
   };
   [_connectivityMonitor handleLossWithHandler:handler
                       wifiStatusChangeHandler:^{
                       }];
-
-  // Create a retain cycle so that this instance lives until the RPC finishes
-  // (or is cancelled). This makes RPCs in which the call isn't externally
-  // retained possible (as long as it is started before being autoreleased).
-  // Care is taken not to retain self strongly in any of the blocks used in this
-  // implementation, so that the life of the instance is determined by this
-  // retain cycle.
-  _retainSelf = self;
-
-  _responseWriteable =
-      [[GRXConcurrentWriteable alloc] initWithWriteable:writeable];
-
-  _wrappedCall = [[GRPCWrappedCall alloc] initWithHost:_host path:_path];
-  NSAssert(_wrappedCall, @"Error allocating RPC objects. Low memory?");
-
-  [self sendHeaders:_requestHeaders];
-  [self invokeCall];
 }
 
 - (void)setState:(GRXWriterState)newState {