【问题标题】:Where to remove delegate in app life cycle?在应用程序生命周期中在哪里删除委托?
【发布时间】:2017-09-16 13:29:25
【问题描述】:

我有一个类的实例,它的委托只能调用一次。

视图控制器 (View A) 将调用 self.delegate = self,并具有转到其他视图控制器 (VC) 的按钮。

在其中一个 VC 中,我需要调用此实例并再次设置委托。

最初我在viewWillAppear 中设置了委托,但这不起作用,因为我在viewDidLoad 中加载了委托数据,并且由于viewDidLoad 将首先运行,我可以在viewDidLoad 中设置委托或loadView

虽然删除委托可以在deallocviewWillDisappear 中,但如果我正在展示VC,则不会调用视图A 的dealloc 不是吗?由于该视图尚未删除。

所以我的问题是,在视图 A 中我在哪里设置 self.delegate = nil

如果我使用当前的 VC 方法,我应该在视图 A 中的哪里设置和删除委托? 在提供的 VC 中,我可以通过 viewDidLoaddealloc 设置和删除。

就应用生命周期的最佳实践提出这个问题。

我看过iOS uiviewcontroller life cycle

【问题讨论】:

    标签: ios objective-c iphone uiviewcontroller delegates


    【解决方案1】:

    在问之前我应该​​自己测试一下。

    无论如何,对于其他可能也有兴趣了解的人。

    视图 A 将在转到其他视图控制器(视图 B)时解除分配。所以在 View A 的 dealloc 处移除 delegate 并在 View B 处设置 delegate 是安全的。

    如果通过单击视图 A 中的 a 来呈现视图 B,则不会调用 dealloc。所以在这种情况下,最好分别使用 viewWillAppear 和 viewWillDisappear 来设置和删除委托。

    干杯。

    【讨论】:

      【解决方案2】:

      您必须在 viewDidAppear 中将 Delegate 设置为 self,并在 viewDidDisappear 中将 Delegate 设置为 nil

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多