diff --git a/tensorflow/lite/g3doc/performance/coreml_delegate.md b/tensorflow/lite/g3doc/performance/coreml_delegate.md
index 2803b080a13..8d588fb1b1e 100644
--- a/tensorflow/lite/g3doc/performance/coreml_delegate.md
+++ b/tensorflow/lite/g3doc/performance/coreml_delegate.md
@@ -69,35 +69,42 @@ The Core ML delegate uses C API for Objective-C codes.
 
 #### Step 1. Include `coreml_delegate.h`.
 
-```objectivec
+```c
 #include "tensorflow/lite/experimental/delegates/coreml/coreml_delegate.h"
 ```
 
 #### Step 2. Create a delegate and initialize a TensorFlow Lite Interpreter
 
-After initializing the interpreter, call `interpreter->ModifyGraphWithDelegate`
-with initialized Core ML delegate to apply the delegate.
+After initializing the interpreter options, call
+`TfLiteInterpreterOptionsAddDelegate` with initialized Core ML delegate to apply
+the delegate. Then initialize the interpreter with the created option.
 
-```objectivec
-// initializer interpreter with model.
-tflite::InterpreterBuilder(*model, resolver)(&interpreter);
+```c
+// Initialize interpreter with model
+TfLiteModel* model = TfLiteModelCreateFromFile(model_path);
 
-// Add following section to use the Core ML delegate.
-TfLiteCoreMlDelegateOptions options = {};
-delegate = TfLiteCoreMlDelegateCreate(&options);
-if (delegate != nullptr) {
-  interpreter->ModifyGraphWithDelegate(delegate);
-}
-// ...
+// Initialize interpreter with Core ML delegate
+TfLiteInterpreterOptions* options = TfLiteInterpreterOptionsCreate();
+TfLiteDelegate* delegate = TfLiteCoreMlDelegateCreate(NULL);  // default config
+TfLiteInterpreterOptionsAddDelegate(options, delegate);
+TfLiteInterpreterOptionsDelete(options);
+
+TfLiteInterpreter* interpreter = TfLiteInterpreterCreate(model, options);
+
+TfLiteInterpreterAllocateTensors(interpreter);
+
+// Run inference ...
 ```
 
-#### Step 3. Dispose the delegate when it is no longer used.
+#### Step 3. Dispose resources when it is no longer used.
 
 Add this code to the section where you dispose of the delegate (e.g. `dealloc`
 of class).
 
-```objectivec
+```c
+TfLiteInterpreterDelete(interpreter);
 TfLiteCoreMlDelegateDelete(delegate);
+TfLiteModelDelete(model);
 ```
 
 ## Best practices
@@ -116,17 +123,17 @@ pass `TfLiteCoreMlDelegateAllDevices`. Following example shows how to do this:
 var options = CoreMLDelegate.Options()
 options.enabledDevices = .all
 let coreMLDelegate = CoreMLDelegate(options: options)!
-let interpreter: try Interpreter(modelPath: modelPath,
-                                delegates: [coreMLDelegate])
+let interpreter = try Interpreter(modelPath: modelPath,
+                                  delegates: [coreMLDelegate])
 ```
 
 #### Objective-C
 
-```objectivec
+```c
 TfLiteCoreMlDelegateOptions options;
 options.enabled_devices = TfLiteCoreMlDelegateAllDevices;
-delegate = TfLiteCoreMlDelegateCreate(&options);
-interpreter->ModifyGraphWithDelegate(delegate);
+TfLiteDelegate* delegate = TfLiteCoreMlDelegateCreate(&options);
+// Initialize interpreter with delegate
 ```
 
 ### Using Metal(GPU) delegate as a fallback.
@@ -149,14 +156,14 @@ let interpreter = try Interpreter(modelPath: modelPath,
 
 #### Objective-C
 
-```objectivec
+```c
 TfLiteCoreMlDelegateOptions options = {};
 delegate = TfLiteCoreMlDelegateCreate(&options);
-if (delegate == nullptr) {
+if (delegate == NULL) {
   // Add Metal delegate options if necessary
-  delegate = TFLGpuDelegateCreate(nullptr);
+  delegate = TFLGpuDelegateCreate(NULL);
 }
-interpreter->ModifyGraphWithDelegate(delegate);
+// Initialize interpreter with delegate
 ```
 
 The delegate creation logic reads device's machine id (e.g. iPhone11,1) to