diff --git a/src/objective-c/GRPCClient/private/GRPCChannel.h b/src/objective-c/GRPCClient/private/GRPCChannel.h
index 49f5bfcc18b9bc703f5dd9ed200e5075c84cd794..49f8b712b9d09aed061178d118342f6c006d97f8 100644
--- a/src/objective-c/GRPCClient/private/GRPCChannel.h
+++ b/src/objective-c/GRPCClient/private/GRPCChannel.h
@@ -43,7 +43,6 @@
 // Convenience constructor to allow for reuse of connections.
 + (instancetype)channelToHost:(NSString *)host;
 
-- (instancetype)initWithHost:(NSString *)host NS_DESIGNATED_INITIALIZER;
 - (instancetype)initWithChannel:(grpc_channel *)unmanagedChannel
                        hostName:(NSString *)hostName NS_DESIGNATED_INITIALIZER;
 
diff --git a/src/objective-c/GRPCClient/private/GRPCChannel.m b/src/objective-c/GRPCClient/private/GRPCChannel.m
index 44f64e704a4504e80eeac532006b48707e21b545..90973cd83d09f9e082273672bcec9aa499a2838a 100644
--- a/src/objective-c/GRPCClient/private/GRPCChannel.m
+++ b/src/objective-c/GRPCClient/private/GRPCChannel.m
@@ -54,17 +54,13 @@
   });
   GRPCChannel *channel = channelCache[host];
   if (!channel) {
-    channel = [[self alloc] initWithHost:host];
+    channel = [self uncachedChannelToHost:host];
     channelCache[host] = channel;
   }
   return channel;
 }
 
-- (instancetype)init {
-  return [self initWithHost:nil];
-}
-
-- (instancetype)initWithHost:(NSString *)host {
++ (instancetype)uncachedChannelToHost:(NSString *)host {
   if (![host rangeOfString:@"://"].length) {
     // No scheme provided; assume https.
     host = [@"https://" stringByAppendingString:host];
@@ -86,6 +82,10 @@
   return nil; // silence warning.
 }
 
+- (instancetype)init {
+  return [self initWithChannel:NULL hostName:nil];
+}
+
 - (instancetype)initWithChannel:(struct grpc_channel *)unmanagedChannel
                        hostName:(NSString *)hostName {
   if (!unmanagedChannel || !hostName) {
@@ -113,12 +113,8 @@
 }
 
 - (void)dealloc {
-  // _unmanagedChannel is NULL when deallocating an object of the base class (because the
-  // initializer returns a different object).
-  if (_unmanagedChannel) {
-    // TODO(jcanizales): Be sure to add a test with a server that closes the connection prematurely,
-    // as in the past that made this call to crash.
-    grpc_channel_destroy(_unmanagedChannel);
-  }
+  // TODO(jcanizales): Be sure to add a test with a server that closes the connection prematurely,
+  // as in the past that made this call to crash.
+  grpc_channel_destroy(_unmanagedChannel);
 }
 @end
diff --git a/src/objective-c/GRPCClient/private/GRPCSecureChannel.h b/src/objective-c/GRPCClient/private/GRPCSecureChannel.h
index d34ceaea0c1162431c7dae912bf862b852c781ef..8c5fe33d61e4618b01fafcbdeb3bfc92120a38a2 100644
--- a/src/objective-c/GRPCClient/private/GRPCSecureChannel.h
+++ b/src/objective-c/GRPCClient/private/GRPCSecureChannel.h
@@ -34,5 +34,5 @@
 #import "GRPCChannel.h"
 
 @interface GRPCSecureChannel : GRPCChannel
-
+- (instancetype)initWithHost:(NSString *)host NS_DESIGNATED_INITIALIZER;
 @end
diff --git a/src/objective-c/GRPCClient/private/GRPCUnsecuredChannel.h b/src/objective-c/GRPCClient/private/GRPCUnsecuredChannel.h
index 9d89cfb5419b7661a5816fbae34237df64776304..8528be44c0057f079eefb5153c3f0b4d9047ac8e 100644
--- a/src/objective-c/GRPCClient/private/GRPCUnsecuredChannel.h
+++ b/src/objective-c/GRPCClient/private/GRPCUnsecuredChannel.h
@@ -34,5 +34,5 @@
 #import "GRPCChannel.h"
 
 @interface GRPCUnsecuredChannel : GRPCChannel
-
+- (instancetype)initWithHost:(NSString *)host NS_DESIGNATED_INITIALIZER;
 @end