Delegate란 무언인가 설명하고, retain 되는지 안되는지 그 이유를 함께 설명하시오.
by 사슴비행기이 블로그가 설명을 잘 해둔것 같습니다.
Delegate? retain이 될까?
1주차 스터디에서 공부했던 "Delegate란 무엇인지 설명하고, Retain이 되는지 안되는지 그 이유를 함께 설명하시오"라는 주제 정리하기🤓Deletate은 "대리자, 위임하다"라는 단어의 뜻처럼 하나의 객
velog.io
제식대로 정리해보겠습니다.
Delegate
: 대리자, 위임자
: 하나의 객체에서 모든 일을 처리하지 않고 처리해야 할 일 중 일부를 다른 객체에 넘기는 것.
(위임된 책임을 캡슐화하는 프로토콜로 구현되며, 위임자가 위임된 기능을 제공하도록 보장한다 -- 무슨 말인지 약간 모르겠음 당연한거 아닌가..?)
: delegate를 통해 일을 위임한 객체는 일을 시킬 뿐, 일이 어떻게 처리되는지 모르기 때문에 코드의 유지보수 측면에서 장점.
retain
: 객체가 메모리에서 해제되지 않도록 호출되어 레퍼런스 카운트를 증가시킴.
: delegate는 객체끼리 참조값을 사용하기 때문에 retaine된다.
메모리 누수는 어떻게 발생하는가?
: Swift는 ARC를 활용해서 자동으로 앱의 메모리 사용을 추적하고 관리.
: 두 인스턴스가 서로 강하게 참조하고 있을 때 RC가 0이 아니기 때문에 참조해제가 불가능해서 메모리 누수가 일어남.
: 필요치 않은 메모리를 계속 점유하고 있어서 메모리 사용량이 증가.
메모리 누수를 방지하는 방법 중 weak과 unowned의 차이?
: RC를 증가시키지 않는다는 공통점이 있음.
weak
: 약한참조
: A와 B가 서로 참조
A인스턴스가 더 수명이 짧아 먼저 할당해제할 수 있을 때 B가 A를 약하게 참조함.
: 참조하는 인스턴스가 메모리에서 해제되면 자동으로 weak 참조를 nil로 설정함.
==> 런타임에 nil로 변경될 수 있기 때문에 weak 참조 인스턴스는 항상 Optional과 var(변수)로 선언되어야 함.
unowned
: weak과 달리 unowned로 선언된 프로퍼티는 항상 값을 가질 것으로 예상 함.
==> NonOptional, let으로 선언 가능
: 메모리에 없는 값에 접근하려고 하면 crash가 발생
==> 다른 인스턴스와 수명이 같거나 더 길다고 확신할 수 있을 경우에만 사용해야 한다.
Delegate에 struct를 사용하면 될까?
: 구조체는 값 타임
==> 할당 포인터를 넘기받지 X
==> 값이 복사 O
: struct(구조체)를 사용할 경우, textField.delegate = self 와 같이 위임자를 넘겨받는 과정에서 주소값이 아니라 값을 넘겨주기 때문에 구조체를 delegate로 선언하는 것은 적절치 X
∴ 프로토콜을 클래스만 채택할 수 있도록 AnyObject를 채택하고 메모리 누수를 막기위해 delegate를 weak로 선언해준다.
'ios > 면접질문 공부' 카테고리의 다른 글
NotificationCenter 동작 방식과 활용 방안에 대해 설명하시오. (2) | 2024.01.14 |
---|---|
Foundation Kit은 무엇이고 어떤 클래스들이 포함되어있는지 설명하세요. (0) | 2024.01.09 |
앱이 foreground에 있을 때와 background에 있을 때 어떤 제약사항이 있나요? (2) | 2024.01.02 |
@main에 대해서 설명하시오. (2) | 2024.01.02 |
앱이 시작할 때 main.c 에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가? (0) | 2023.12.30 |
블로그의 정보
Beautiful Coding
사슴비행기