AnyObject와 Protocol

Delegate 패턴을 사용할때 순환참조를 막기위해 protocol에 AnyObject를 상속 받습니다. AnyObject를 상속받지 않을시 delegate앞에 weak를 붙일경우 오류가 생기는것을 볼 수 있습니다. 

 

'weak' must not be applied to non-class-bound 'DrawWaveFormManagerDelegate'; consider adding a protocol conformance that has a class bound 라는 에러가 뜹니다. 해석하자면 weak는 class에 타입에서만 사용가능한데, 해당 프로토콜은 어디서 사용할 지 모르니 weak를 붙일수 없다고 합니다. 그렇다면 class를 붙이면 되는데 왜 AnyObject를 붙여야 할까요?

AnyObject가 아니라 class로 제한해도 잘 작동한다.

Zedd님 블로그에 그 내용이 나와있는데요, 간단하게 요약하자면 AnyObject와 Class는 서로 같다고 합니다. Class 내부에 AnyObject가 typealias로 선언되어있습니다. 다만 아직 class가 개발이 완료(?) 되지 않아서 대리자로 AnyObject로 사용한다는 것 같습니다.