如何清理自定义控件?

时间:2017-03-15 15:41:10

标签: ios xamarin xamarin.ios

说,我通过布置几个按钮并描述其状态来构建自定义UISegmentedControl。我将TouchUpInside个听众附加到他们身上,以便在选择时相应地改变他们的外观。问题是我不知道在哪里删除这些监听器以避免内存泄漏。 UIViewUIControl没有ViewDidDisappear UIViewController之类的# The following route has the :browser and :locale plugs /:locale/ # Points to MyApp.PageController.dummy # The following route has the :browser, :locale and :auth plugs /:locale/auth/ # Points to MyApp.MyApp.PageController.dummy ,我会用它来移除隐身时的听众。

我应该在哪里删除这些听众?

2 个答案:

答案 0 :(得分:1)

我建议查看以下内容何时调用,看看它们是否适合您对UIView的需求:

  

didAddSubview:,willRemoveSubview:根据需要实施这些方法,以跟踪子视图的添加和删除。 willMoveToSuperview :,   didMoveToSuperview根据需要实现这些方法来跟踪   在视图层次结构中移动当前视图。

     

willMoveToWindow:,didMoveToWindow根据需要实现这些方法   跟踪视图移动到不同的窗口。

(以上摘自此SO帖子:SO Reply

这将允许您关注“superview”对视图的操作,当它被解雇时,您应该能够运行清理代码。

答案 1 :(得分:0)

您无需删除“听众”。从UIControl

的文档中,addTarget(_: action: for:)没有强烈引用目标
  

控件不会将对象保留在target参数中。在将目标对象附加到控件时,您有责任保持对目标对象的强引用。