3

アーキテクチャを 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)私は、両方のプロトコル参照が両方のクラスで強力なプロパティ宣言を使用していることに気付きました.保持サイクルにつながりませんか?

4

2 に答える 2

2

1) View(UIViewController) が解放されると、モジュール全体が解放されます。

https://medium.com/mobile-travel-technologies/architecting-mobile-apps-with-b-viper-modules-e94e277c8d68#.e4eh7c1l2

ここに画像の説明を入力

2) VTDListWireframe では、その listViewController は RootViewController であるため、解放されないため、リサイクルの保持につながりません。これらのコードを読んで、アイデアを見つけてください。

于 2016-02-25T03:09:51.430 に答える