Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

<3주차> Delegate란 무언인가 설명하고, retain 되는지 안되는지 그 이유를 함께 설명하시오. #14

Closed
namsoo5 opened this issue Nov 13, 2020 · 6 comments

Comments

@namsoo5
Copy link
Collaborator

namsoo5 commented Nov 13, 2020

No description provided.

@namsoo5
Copy link
Collaborator Author

namsoo5 commented Nov 17, 2020

Delegate란

어떤 객체가 해야할일을 부분적으로 확장해서 대신 처리해주는 역할을 해준다.
대신처리해줄 객체와 처리하라고 시키는 객체가 존재함

retain 되는가?
객체여서 참조값을 주고 받기때문에 retain이 된다.

@iJoom
Copy link
Collaborator

iJoom commented Nov 18, 2020

Delegate
객체지향 프로그래밍에서 하나의 객체가 모든 일을 처리하는 것이 아니라 처리해야 할 일 중 일부를 다른 객체에 넘기는 것
효율성 관점에서 아주 중요한 역할을 함, 기능을 위임할 수 있는 객체가 있다는 것은 그만큼 직접 구현해야 하는 부분이 적다는 뜻이기 때문에 큰 규모의 프로그램을 빠르게 구현가능
Retain Cycle: 메모리가 해제되지 않고 유지되어 누수가 생기는 현상

순환참조(두 객체가 서로 잡고있어 하나가 사라지려고 할 때 다른 한 쪽이 잡고 있으면 사라지지 않는 현상)에 의한 메모리 누수가 발생할 수 있다, weak 선언과 옵셔널로 선언해 약한 참조로 선언해 메모리 누수 발생을 방지한다.

@iJoom iJoom added the 인준 label Nov 18, 2020
@khyunjiee
Copy link
Member

Delegate

대리자
객체 지향 프로그래밍에서 하나의 객체가 모든 일을 처리하는 것이 아니라 처리해야 할 일 중 일부를 다른 객체에게 넘기는 것을 의미한다.

retain : 메모리가 해제되지 않아서 낭비되는 현상을 의미 (Memory Leak)
retain 되는지?
Delegate는 객체 간의 작업이기 때문에 참조 값을 사용한다. 그래서 retain 현상이 일어난다.

해결 방법
weak : 약한 참조
unowned : 약한 참조이고 해제된 메모리 영역에 재접근하지 않는다는 확신이 있을 때

@5anniversary
Copy link
Collaborator

5anniversary commented Nov 20, 2020

Delegate

모든 일을 한 객체에게 맡기는게 아니라, 그 객체가 수행해야할 일을 델리게이트가 일부를 받아서 대신 처리해주는 것.

즉 대신 처리를 해줄 객체!!

retain이란...?

retain cycle이라고 정확하게 말하면 메모리가 해제되지 않고 유지되어 누수가 생기는 현상을 말함

따라서 객체간의 작업인 delegate에 retain현상이 일어남

plus

해당 블로그에서 Obj-c에서는 retain을 사용하지 않고 assign을 한다는데 조큼 신기 했음!

@choidam
Copy link
Member

choidam commented Nov 20, 2020

Delegate

어떤 객체가 해야 하는 일을 부분적으로 확장해 대신 처리하는 것을 의미합니다.

객체의 행동을 단순화 하면서 객체 간의 결합성을 최소화 시키는 데에 장점이 있습니다.
메세지를 수신 받는 객체가 많을 때는 Notification, 하나의 객체가 여러가지 요구를 받는다면 Delegate 를 사용합니다.

Retain

객체에 대한 메모리가 해제되지 않아 누수가 발생하는 현상을 의미합니다. (두 클래스 인스턴스가 서로 강한 참조를 하게 되면 Retain Cycle이 발생합니다.)

이 때 참조를 weak 로 선언하면 강한 참조가 되지 않아 객체의 메모리가 해제되면 자동으로 nil 이 됩니다.

@choidam choidam added the label Nov 20, 2020
@Juhyeoklee
Copy link
Collaborator

Delegate

Delegate 란 하나의 객체가 모든 일을 처리하는 것이 아니라 처리해야 할 일 중 일부를 다른 객체에게 위임하는 것이다.
객체의 행동을 단순화 시키고 객체간 결합성을 최소화하는 장점이 있다.

Retain

Retain cycle은 메모리가 해제되지 않고 유지되어 누수가 생기는 현상을 말하며 두 객체간의 참조가 강한 순환참조가 생겨 메모리에서 해제되지 않는 현상이다.

따라서 Delegate 또한 객체간의 참조가 이루어 지기 때문에 retain cycle 현상이 발생할 수 있다.

따라서 아래 TableView와 같이 delegate를 weak으로 선언하여 메모리가 해제 될시 자동으로 해제시켜 주어야 한다.

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment