weak로 지정하기 때문에 애플리케이션이 해당 델리게이트에서 어떠한 동작을 할 때만 쓰입니다.
weak로 하지 않으면 서로 참조하고 있기 때문에 메모리가 해제되지 않고 계속 낭비가 되기 때문에 이런 부분이 많아지면 앱이 죽을수도 있습니다.
또한 weak를 사용하기 위해서는 프로토콜에 class를 상속받아야 합니다(class에서 사용이 가능하다는 뜻)
import Foundation
protocol KingDelegate: class {
func sayGetOutOfTheWay()
}
class King {
weak var delegate: KingDelegate?
func sayIt() {
self.delegate?.sayGetOutOfTheWay()
}
}
class Servant: KingDelegate {
func sayGetOutOfTheWay() {
print("servant: Get out of the way")
}
}
let servant = Servant()
let king = King()
king.delegate = servant
//-----------
king.sayIt()
어떤 하나의 표(table)가 있다고 가정하고 DataSource와 Delegate를 구현했다고 했을 때
DataSource Method는 표의 줄을 몇 줄로 해줘, 표의 셀 크기 몇 으로 해줘 등등 요소들을 채택, 역할 수행
Delegate는 표를 보여줘, 표의 모든 행이 다 채워지면 보여줘 등등 동작을 채택, 역할 수행
이라고 볼 수 있다.
https://velog.io/@iwwuf7/Swift-Delegate-Pattern에-대해서
https://you9010.tistory.com/275