• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

dismiss 되었을 때 종료질문

23.07.18 14:05 작성 23.07.18 14:08 수정 조회수 153

0

섹션 3 - 1에서

weak self 로 전달된 클로저는 뷰 컨트롤러가 dismiss되었을 때 클로저의 작업들이 뷰 컨트롤러 객체 안에 속해있기 때문에, 클로저의 작업도 함께 종료된다고 하셨는데.

섹션 3 - 2 에서 보여주신 weak self 예제에서는 뷰 컨트롤러가 소멸되었음에도 클로저의 작업이 계속 진행되더라고요.

 

왜 다른 결과가 나오는지 궁금합니다.

 

 

답변 1

답변을 작성해보세요.

1

아 네네 제가 지금 해당 강의 내용을 다시 확인해보니,

해당 내용이 조금 잘 못 표현되었네요. (섹션 3-2번에서 설명드린 내용이 맞습니다.)
(경우에 따라서 아래 내용처럼 dismiss되었을때, 클로저 작업을 중단하게도 설계할 수 있지만.. )

일단 아래 내용의 코드에서는 중단이 안되는 것이 맞습니다. (클로저에 오래 걸리는 일을 시키고.. 그 해당 일이 진행되는 동안에는 뷰컨트롤러가 dismiss 되더라도 클로저의 작업이 진행되는 것이 맞습니다.)

image

이 내용을 정정해서 다시 말씀드리자면

(1) [weak self] ▶️ 큐로 보낸 클로저 작업이 뷰컨트롤러의 RC를 올라가지 않게 하므로 (뷰컨트롤러를 강하게 붙잡아 둘 수 없고) 클로저가 여전히 실행 중이라도 뷰컨트롤러가 해제될 수 있음

(2) [self] ▶️ 큐로 보낸 클로저 작업이 뷰컨트롤러의 RC를 올라가게 하므로 (뷰컨트롤러를 강하게 붙잡아 둘 수 있고) 클로저가 여전히 실행 중인 동안 뷰컨트롤러가 해제될 수 없음


이렇게 정정되는 것이 정확한 표현이겠네요!

그래서, 질문 주신대로 일단 3-1 부분에서 설명드린 내용하고 표현이 잘 못되었고,.. 해당 코드 내용과 일관된 내용으로 수정해서 말씀드리면.. 섹션 3 - 2 에서 weak self 예제에서 보시는 바와 같이.. 뷰 컨트롤러가 소멸 되어도 클로저의 작업은 계속 진행되고.. 이 경우 뷰컨트롤러는 사라질 수 있지만(dismiss), 클로저는 일을 여전히 진행하게 되고.. 뷰컨트롤러의 존재 유무에 따라서 "nil"이 출력되던지 "뷰컨"이 출력되는 것이 맞습니다.

내용이 조금 잘 못되어서 죄송합니다. 해당 내용에 대해 질문이 올라오지 않아서, 정확하게 인지를 못하고 있었네요. 현재 이 강의에 대해 전체적인 업데이트를 진행하고 있어서.. 조만간 현재의 GCD내용 포함 새롭게 도입된 async/await내용도 업데이트를 준비중이니.. 조금만 너그러이 양해를 부탁드립니다.

감사합니다. :)

- 앨런 드림 -

iyea님의 프로필

iyea

질문자

2023.07.18

자세한 답변 감사드립니다!