guard let self = self vs self?.

Posted on 2021-12-20 by GKSRUDTN99
Swift&Xcode Swift RxSwift

guard let self = self vs self?.

Closure를 사용할 때 retain cycle로 인해 VC이 해제되지 않는 현상을 방지하기 위해 [weak self]를 사용한다.
[weak self]를 사용하면 self는 Optional Type이 되므로, guard let self = selfself?.을 통해 self에 접근할 수 있는데, 둘 사이에는 차이점이 있다.

1. guard let self = self

self(VC)가 클로저가 종료되기 전까지 해제되지 않는다.
클로저 내에서 이미지 업로드 같이 오래걸리는 작업을 실행하는 경우, 해당 작업들이 끝나기 전까지 self가 해제되지 않는다.
데이터 전송 중 중간에 끊기거나 하는 등의 현상으로 인해 객체가 해제되기 전에 모든 작업을 끝내고 싶은 경우 사용하기에 적절하다.

2. self?.

self(VC)가 해제되면 해당 구문은 실행되지 않는다.
VC가 해제됨과 동시에 해당 구문들은 실행되지 않으므로, imageView에 imagePath를 통해 이미지를 로드하는 구문이 클로저 내에 있다면, VC가 해제되고 나면 해당 작업을 실행할 필요가 없으므로 이같은 상황에 사용하기 적합하다.