ios - addTarget 使用安全吗?

标签 ios objective-c swift uitableview addtarget

我最近对 ​​cellForRowAtIndexPath 中的 UITableViewCell 使用 addTarget() 有点怀疑。我也很想知道从 UITableViewCell 监听按钮事件的最佳实践是什么。

当我发现无法取消注册我添加到位于 UITableViewCell 中的 UIButton 的 addTarget 监听器时,我开始感到困惑:

cellForRowAtIndexPath 的代码:

cell.button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)

上面的代码向驻留在 UITableViewCell 中的 UIButton 注册了一个监听器,但我看到没有取消注册它们的引用。我不确定这个过程是否是自动的(添加目标机制),我也没有在 Apple 文档中找到任何这样的引用资料(至少我已经搜索过)。

所以,我的问题是,addTarget 用于 UITableViewCell 按钮好用吗?当 View Controller 消失时,它们是否都注销了?

或者,如果我使用 addObserver 会更好吗?

override func viewDidLoad()
{
        super.viewDidLoad()
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "onCellButtonPressed:", name: "cellButtonPressed", object: nil)
}

func onCellButtonPressed(notification:NSNotification)
{
        if let sender = notification.object as? UIButton
        {
                ...
        }
}

在 UITableViewCell 代码中:

@IBAction func onButtonPressed(sender: AnyObject)
{
NSNotificationCenter.defaultCenter().postNotificationName("cellButtonPressed", object: sender)
}

对此有任何建议,我们将不胜感激。

最佳答案

传递给 addTarget 的目标不会保留。使用安全;您不需要“注销”(或删除)目标。这是控制操作(如按下按钮)的标准机制,您应该使用它(相对于通知)。

关于ios - addTarget 使用安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31980515/

相关文章:

ios - 在 Swift 中获取网页 HTML 代码

ios - 如果 block 在方法中的 dispatch_after 函数中使用,是否必须制作 block 的堆副本

Objective-C:我应该声明私有(private)方法吗?

ios - 快速设置 UiCollectionView 中单元格的选定颜色

multidimensional-array - 如何快速创建多维数组?

android - 更改解析客户端 key

ios - 是否可以在选项卡栏项 (BadgeValue) 中添加 UILabel

android - 发送推送通知时,firebase 是否自行管理设备 token 、bundle id 等用户数据,还是我们必须管理这些数据?

c++ - 如何从 Photoshop 滤镜插件 (Photoshop SDK) 访问 exif 数据字段

ios - 只有在tableview中点击时才会显示数据