title: Why protocols are used in both direction in VIPER architecture rather than in one direction
body: <p>We want to change my architecture from MVC to VIPER. I read basic tutorial by following <a href="http://mutualmobile.github.io/blog/2013/12/04/viper-introduction/" rel="nofollow">http://mutualmobile.github.io/blog/2013/12/04/viper-introduction/</a></p>
  
  <p>source code link : <a href="https://github.com/mutualmobile/Counter" rel="nofollow">https://github.com/mutualmobile/Counter</a></p>
  
  <pre><code>- (void)createScreen
  {
      CNTCountViewController* view = [[CNTCountViewController alloc] init];
      CNTCountPresenter* presenter = [[CNTCountPresenter alloc] init];
      CNTCountInteractor* interactor = [[CNTCountInteractor alloc] init];
  
      view.presenter = presenter;//object
      presenter.view = view;//protocol
  
      presenter.interactor = interactor;
      interactor.output = presenter;
  
      self.window.rootViewController = view;
  }
  </code></pre>
  
  <p>Where for communication from viewcontroller ---> presenter is via preseter's object  and presenter --- > viewcontroller throught delegate (protocol). I think this is to avoid retain cycles.</p>
  
  <p>But i also went through one more tutorial <a href="https://www.objc.io/issues/13-architecture/viper/" rel="nofollow">https://www.objc.io/issues/13-architecture/viper/</a> 
  source code link :<a href="https://github.com/objcio/issue-13-viper" rel="nofollow">https://github.com/objcio/issue-13-viper</a></p>
  
  <p>where he used  protocols only for both direction in VTDListWireframe</p>
  
  <pre><code>- (void)presentListInterfaceFromWindow:(UIWindow *)window
  {
      VTDListViewController *listViewController = [self listViewControllerFromStoryboard];
      listViewController.eventHandler = self.listPresenter;//protocol
      self.listPresenter.userInterface = listViewController;//protocol
      self.listViewController = listViewController;
  
      [self.rootWireframe showRootViewController:listViewController
                                        inWindow:window];
  }
  </code></pre>
  
  <p>Here</p>
  
  <p>1)What is the advantage of using protocols in both direction ?</p>
  
  <p>2)I observed that both protocol references are with strong property declaration in both classes.won't it lead to retain cycle ?</p>