Безопасно ли использовать addTarget?

В последнее время я немного скептически отношусь к использованию addTarget() для UITableViewCell в cellForRowAtIndexPath. Мне также хотелось бы узнать, как лучше всего слушать событие кнопки от UITableViewCell.

Моя путаница начинается, когда я вижу, что у меня нет возможности отменить регистрацию прослушивателя addTarget, который я добавляю в UIButton, в UITableViewCell:

Код для cellForRowAtIndexPath:

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

Приведенный выше код регистрирует прослушиватель UIButton, который находится в UITableViewCell, но я не вижу там никакой ссылки на их отмену регистрации. Я не уверен, является ли этот процесс автоматическим или нет (для addTarget-механизма), я не нашел ни одной ссылки, которая бы говорила об этом в Apple doc (насколько я искал, по крайней мере), также.

Итак, мой вопрос: хорошо ли использовать addTarget для кнопок UITableViewCell? Все ли они отменяют регистрацию при исчезновении контроллера вида?

Или было бы хорошо, если бы я использовал 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)
}

Любое предложение по этому вопросу будет оценено.

1 ответ

Цель передана addTarget не сохраняется. Это безопасно для использования; Вам не нужно "отменять регистрацию" (или удалять) цель. Это стандартный механизм управляющих действий (например, нажатий кнопок), и вы должны использовать его (вместо уведомлений).

Другие вопросы по тегам