dismiss 되었을 때 종료질문
섹션 3 - 1에서
weak self 로 전달된 클로저는 뷰 컨트롤러가 dismiss되었을 때 클로저의 작업들이 뷰 컨트롤러 객체 안에 속해있기 때문에, 클로저의 작업도 함께 종료된다고 하셨는데.
섹션 3 - 2 에서 보여주신 weak self 예제에서는 뷰 컨트롤러가 소멸되었음에도 클로저의 작업이 계속 진행되더라고요.
왜 다른 결과가 나오는지 궁금합니다.
回答 1
1
아 네네 제가 지금 해당 강의 내용을 다시 확인해보니,
해당 내용이 조금 잘 못 표현되었네요. (섹션 3-2번에서 설명드린 내용이 맞습니다.)
(경우에 따라서 아래 내용처럼 dismiss되었을때, 클로저 작업을 중단하게도 설계할 수 있지만.. )
일단 아래 내용의 코드에서는 중단이 안되는 것이 맞습니다. (클로저에 오래 걸리는 일을 시키고.. 그 해당 일이 진행되는 동안에는 뷰컨트롤러가 dismiss 되더라도 클로저의 작업이 진행되는 것이 맞습니다.)
이 내용을 정정해서 다시 말씀드리자면
(1) [weak self] ▶️ 큐로 보낸 클로저 작업이 뷰컨트롤러의 RC를 올라가지 않게 하므로 (뷰컨트롤러를 강하게 붙잡아 둘 수 없고) 클로저가 여전히 실행 중이라도 뷰컨트롤러가 해제될 수 있음
(2) [self] ▶️ 큐로 보낸 클로저 작업이 뷰컨트롤러의 RC를 올라가게 하므로 (뷰컨트롤러를 강하게 붙잡아 둘 수 있고) 클로저가 여전히 실행 중인 동안 뷰컨트롤러가 해제될 수 없음
이렇게 정정되는 것이 정확한 표현이겠네요!
그래서, 질문 주신대로 일단 3-1 부분에서 설명드린 내용하고 표현이 잘 못되었고,.. 해당 코드 내용과 일관된 내용으로 수정해서 말씀드리면.. 섹션 3 - 2 에서 weak self 예제에서 보시는 바와 같이.. 뷰 컨트롤러가 소멸 되어도 클로저의 작업은 계속 진행되고.. 이 경우 뷰컨트롤러는 사라질 수 있지만(dismiss), 클로저는 일을 여전히 진행하게 되고.. 뷰컨트롤러의 존재 유무에 따라서 "nil"이 출력되던지 "뷰컨"이 출력되는 것이 맞습니다.
내용이 조금 잘 못되어서 죄송합니다. 해당 내용에 대해 질문이 올라오지 않아서, 정확하게 인지를 못하고 있었네요. 현재 이 강의에 대해 전체적인 업데이트를 진행하고 있어서.. 조만간 현재의 GCD내용 포함 새롭게 도입된 async/await내용도 업데이트를 준비중이니.. 조금만 너그러이 양해를 부탁드립니다.
감사합니다. :)
- 앨런 드림 -
오퍼레이션 큐 질문
0
128
2
2) 오퍼레이션큐(OperationQueue) 강의 질문입니다
0
145
2
warning 뜸
0
151
1
수업자료 markup 에 대해 궁금합니다!
0
273
1
예제 프로젝트 빌드 실패
0
331
2
serial 큐 질문드립니다.
0
251
1
[7-3.DispatchBarrier] 예제 코드 질문
0
325
1
안녕하세요, GCD 관련 질문드립니다..
0
284
1
main.async 작동 질문(+ vs global(),async)
0
432
1
'동기'와 '동시성 프로그래밍'에 대해 질문드립니다.
0
491
2
Dependency Protocol 관련
1
364
1
시리얼 큐와 sync 관련
0
464
2
sync이지만 Queue에 넣으면 async로 동작한다는 말의 의미
0
645
1
lazy var 이슈로 생긴 여러 변수들은 어디에 있나요?
0
385
1
global큐에 sync로 작업을 보냈을 때는 터지지 않는 이유가 궁금합니다.
1
501
2
비동기 개념에서 무엇을 return하는 거죠??
0
391
1
안녕하세욤
1
339
1
Barrier 작업 관련 질문입니다.
1
340
1
디스패치 그룹
1
381
1
global async안에 global async를 만들게되면 어떻게 되나요??
2
379
2
동기적 함수를 비동기적 함수로 바꾸는 부분에서 질문 있습니다
1
285
2
비동기오퍼레이션 관련 질문
1
369
1
강의자료는 어디에 있나요?
1
321
1
AsyncOperation을 async await Task로 대체 가능한 지에 대한 질문
1
410
1

