강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

앨런 Swift Concurrency for Swift 6 (Part-1)

Task(작업)과 self 사용 관련 및 캡처리스트의 weak self 사용 (5강)

Task 클로저에서 weak self 미사용에 대해 질문드립니다!

작성

·

114

0

양질의 강의 만들어주셔서 업무에 많이 도움이 될 것 같아 먼저 감사의 말씀 드립니다:)

'Task(작업)과 self 사용 관련 및 캡처리스트의 weak self 사용 (5강)'에서 질문 드립니다.

 

Task 클로저 내에서 weak self를 생략하더라도 메모리 누수 관점에서 문제가 없는 것은 이해가 되었습니다!

다만, GCD를 Task로 전환하는 관점에서 생각해봤는데요

 

'self가 해제된 시점'에서 'weak self 사용'한 'GCD 클로저'에서는 내부 동작이 실행되지 않을 것 같은데요

'self가 해제된 시점'에서 'weak self 미사용'한 'Task 클로저'에서는 내부 동작의 실행이 보장될 것 같은데 제가 이해한게 맞을지 궁금합니다!

길지 않은 비동기 작업이더라도 미세하게 동작 차이가 발생할 수 있는 부분이 아닐까 싶어 질문 드렸습니다!

 

답변 1

0

앨런(Allen)님의 프로필 이미지
앨런(Allen)
지식공유자

안녕하세요 범수님!

 

(이런 질문을 주실때는 코드 예시가 있었으면, 더 좋았을 것 같다는 생각이 들긴하네요. 코드 예시가 없으면, 서로의 말의 의도가 다를 수도 있으니까요..ㅠㅠ)

무튼 그럼에도.. 질문주신 바를 최대한 의도에 맞게 답변을 드려보면..

'self가 해제된 시점'에서 'weak self 사용'한 'GCD 클로저'에서는 내부 동작이 실행되지 않을 것 같은데요 ===> 아니요. 일반적으로 self가 nil이 되니.. nil 상태로 동작을 합니다. (클로저는 self가 nil 인 상태로.. 클로저의 중괄호가 끝날때까지 동작을 합니다. 그렇기 때문에 일반적으로 중간에 guard let self else 이런 코드를 넣어, 동작을 안 시킬 수는 있겠죠. self가 nil인 경우 guard 문에서 종료가 될테니까요.)

'self가 해제된 시점'에서 'weak self 미사용'한 'Task 클로저'에서는 내부 동작의 실행이 보장될 것 같은데 ===> self가 해제된 시점이라고 가정하는게 의미가 있을까요??ㅠㅠ 어차피 Task 클로저는 [weak self]를 사용하지 않아도, 중괄호 끝까지 self를 유지시키다가 자연스럽게 중괄호가 끝날때 self를 해제시킨다는 것인데요? self가 해제가 되었다면, 처음부터 Task 클로저를 실행하지도 못할 상황에 더 가깝지 않을까(?)란 생각이 듭니다.. (제 생각엔 가정이 이상하긴 하지만, Task가 동작을 시작했다면, 중괄호가 끝날때까지 동작은 하겠죠.)


(제가... 질문 주신 의도를 잘 모르겠습니다...ㅠㅠ 제가 질문 주신 의도를 잘 못 파악 한 것이라면 다시 질문 부탁드립니다.)

 

무튼, 위에서 말씀드린 대로 [weak self]를 GCD클로저도 일단은 self가 nil인 상태로 동작을 하게 되니.. 두 경우다 클로저가 종료 시점까지 동작을 하게 됩니다.

 

 

고맙습니다. :)

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기