说,我通过布置几个按钮并描述其状态来构建自定义UISegmentedControl
。我将TouchUpInside
个听众附加到他们身上,以便在选择时相应地改变他们的外观。问题是我不知道在哪里删除这些监听器以避免内存泄漏。 UIView
和UIControl
没有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
,我会用它来移除隐身时的听众。
我应该在哪里删除这些听众?
答案 0 :(得分:1)
我建议查看以下内容何时调用,看看它们是否适合您对UIView的需求:
didAddSubview:,willRemoveSubview:根据需要实施这些方法,以跟踪子视图的添加和删除。 willMoveToSuperview :, didMoveToSuperview根据需要实现这些方法来跟踪 在视图层次结构中移动当前视图。
willMoveToWindow:,didMoveToWindow根据需要实现这些方法 跟踪视图移动到不同的窗口。
(以上摘自此SO帖子:SO Reply)
这将允许您关注“superview”对视图的操作,当它被解雇时,您应该能够运行清理代码。
答案 1 :(得分:0)
您无需删除“听众”。从UIControl
:
addTarget(_: action: for:)
没有强烈引用目标
控件不会将对象保留在target参数中。在将目标对象附加到控件时,您有责任保持对目标对象的强引用。