アーキテクチャを MVC から VIPER に変更したいと考えています。http://mutualmobile.github.io/blog/2013/12/04/viper-introduction/に従って、基本的なチュートリアルを読みました
ソースコードリンク: https://github.com/mutualmobile/Counter
- (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;
}
ビューコントローラーからの通信の場合 ---> プレゼンターはプリセッターのオブジェクトとプレゼンターを介して行われます --- > ビューコントローラーはデリゲート (プロトコル) を介して行われます。これは保持サイクルを避けるためだと思います。
しかし、私はもう1つのチュートリアルも行いましたhttps://www.objc.io/issues/13-architecture/viper/ ソースコードリンク: https://github.com/objcio/issue-13-viper
彼は VTDListWireframe で両方向にのみプロトコルを使用しました
- (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];
}
ここ
1) 双方向でプロトコルを使用する利点は何ですか?
2)私は、両方のプロトコル参照が両方のクラスで強力なプロパティ宣言を使用していることに気付きました.保持サイクルにつながりませんか?