inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

해결된 질문

162

작성자 없음

작성한 질문수 0

0

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

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

 

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

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

 

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

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

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

 

ios swift 동시성 async-await concurrency

답변 1

0

앨런(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인 상태로 동작을 하게 되니.. 두 경우다 클로저가 종료 시점까지 동작을 하게 됩니다.

 

 

고맙습니다. :)

수강 기간 연장 문의

0

25

1

수강연장부탁드려도될까요..

0

40

2

Combine Playground 에서 실행 시

0

54

2

레디선 테스트코드에서 채널이름은 없어도 되는건가요?

0

39

2

70강 - 글로벌 액터로 격리된 Protocol 을 extension 에서 conform 시 타입 본체의 격리 수준 질문

0

41

1

searchable이 화면 하단에 위치해요

0

60

2

모니터와 synchronized, ReentrantLock, 원자적연산 CAS관련해서 추가적으로 더 깊게 공부했는데 제가 이해한 것이 맞나요??

0

83

1

mac python 3.10 - permission denied

0

53

1

Future cancel기능을 사용했지만 interrupt가 발생하지 않을 때 어떻게 처리해야하나요?

0

71

2

Drawing Cycle 관련 질문

0

72

1

2.스레드 생성과 실행 - 17P 그림 문의

0

71

2

Task 의 default 우선순위 문의 (utility vs medium)

0

69

2

18강 자식 작업의 메타데이터 상속 관련 강의 자료 문의

0

64

1

withCheckedContinuation 에서 resume 호출의 안정성 보장 질문

0

95

1

참고 코드 자료 7-StructuredConcurrency(102, 103줄) 오타?

0

74

3

비동기 반복문은 하나의 thread에서만 동작하게 되나요??

0

92

2

25.05.13일 업데이트 내용 문의

0

117

1

5강 weak self 처리 관련

1

176

2

업데이트 예정 강의 공개 일정이 궁금합니다.

1

148

1

29강 async let 작업 취소 부분 질문

1

186

1

Task를 함수 내부에서 사용했을 때 값의 변화를 예상하는 법

0

266

2

파트1 PDF 강의 자료 다운로드

0

187

2

Part 2에 대해서

0

223

1

강의자료 관련 질문

0

306

2