Delegation — это паттерн проектирования, при котором один объект передаёт (делегирует) свои обязанности другому объекту. Это создаёт однозначную связь между двумя объектами.
Паттерн опирается на три ключевых компонента:
weak ссылку на своего делегатаweak ссылка критична — она предотвращает циклические ссылки и утечки памяти.
UITableView активно использует этот паттерн. Он передаёт ответственность за отображение и обработку пользовательских взаимодействий отдельному объекту через UITableViewDelegate.
protocol TaskDelegate: AnyObject {
func taskDidComplete(_ task: Task)
}
class Task {
weak var delegate: TaskDelegate?
func finish() {
delegate?.taskDidComplete(self)
}
}
class ViewController: UIViewController, TaskDelegate {
func taskDidComplete(_ task: Task) {
print("Task finished!")
}
}
В паттерне делегирования ссылка на делегат должна храниться как strong, а не weak, чтобы объект делегата оставался в памяти во время жизни объекта-делегирующего.
Новый — ещё не проверен сообществом
Вы