Non-Escaping ν΄λ‘μ λ ν¨μμ μΈμλ‘ μ λ¬λμ λ, ν¨μμ μ€νμ΄ μ’ λ£λκΈ° μ μ μ€νλλ ν΄λ‘μ .
Escaping ν΄λ‘μ λ ν΄λ‘μ κ° ν¨μμ μΈμλ‘ μ λ¬λμ λ, ν¨μμ μ€νμ΄ μ’ λ£λ ν μ€νλλ ν΄λ‘μ .
Non-Escaping ν΄λ‘μ
func runClosure(closure: () -> Void) {
closure()
}
ν΄λ‘μ κ° μ€νλλ μμλ₯Ό 보면
- ν΄λ‘μ κ° runClosure() ν¨μμ closure μΈμλ‘ μ λ¬λ¨
- ν¨μ μμμ closure() κ° μ€νλ¨
- runClosure() ν¨μκ° κ°μ λ°ννκ³ μ’ λ£λ¨
μ΄λ κ² ν΄λ‘μ κ° ν¨μκ° μ’ λ£λκΈ° μ μ μ€νλκΈ° λλ¬Έμ closureλ Non-Escaping ν΄λ‘μ μ΄λ€.
Escaping ν΄λ‘μ
func makeRequest(_ completion: @escaping (Result<(Data, URLResponse), Error>) -> Void) {
URLSession.shared.dataTask(with: URL(string: "http://jusung.github.io/")!) { data, response, error in
if let error = error {
completion(.failure(error))
} else if let data = data, let response = response {
completion(.success((data, response)))
}
}
}
makeRequest() ν¨μμμ μ¬μ©λλ completion ν΄λ‘μ λ ν¨μ μ€ν μ€μ μ¦μ μ€νλμ§ μκ³ , URL μμ²μ΄ λλ ν λΉλκΈ°λ‘ μ€νλλ€.
λ³΄ν΅ ν΄λ‘μ κ° λ€λ₯Έ λ³μμ μ μ₯λμ΄ λμ€μ μ€νλκ±°λ λΉλκΈ°λ‘ μ€νλ λ escaping ν΄λ‘μ κ° μ¬μ©λλ€.
Escaping, Non-escaping ν΄λ‘μ λ₯Ό λλ μ μ¬μ©νλ μ΄μ
- non-escaping ν΄λ‘μ λ μ»΄νμΌλ¬κ° ν΄λ‘μ μ μ€νμ΄ μΈμ μ’ λ£λλμ§ μκΈ° λλ¬Έμ, λμ λ°λΌ ν΄λ‘μ μμ μ¬μ©νλ νΉμ κ°μ²΄μ λν retain, release λ±μ μ²λ¦¬λ₯Ό μλ΅ν΄ κ°μ²΄μ λΌμ΄νμΈμ΄ν΄(life-cycle)μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μλ€.
- esacping ν΄λ‘μ λ ν¨μ λ°μμ μ€νλκΈ° λλ¬Έμ ν΄λ‘μ κ° ν¨μ λ°μμλ μ μ ν μ€νλλ κ²μ 보μ₯νκΈ° μν΄, ν΄λ‘μ μμ μ¬μ©νλ κ°μ²΄μ λν μΆκ°μ μΈ μ°Έμ‘°μΈμ΄ν΄(reference cycles) κ΄λ¦¬ λ±μ ν΄μ€μΌ νλ€. μ΄ λΆλΆμ΄ μ»΄νμΌλ¬μ νΌν¬λ¨Όμ€μ μ΅μ νμ μν₯μ λΌμΉκΈ° λλ¬Έμ Swiftμμλ νμν λλ§ escaping ν΄λ‘μ λ₯Ό μ¬μ©.
μ°Έκ³
'iOS π > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
RxSwift Operator : Map, FlatMap (0) | 2022.04.18 |
---|---|
typealias, associatedtype (0) | 2022.04.15 |
μ κ·Όμ μ΄, Access control (0) | 2021.12.28 |
Method Dispatch (0) | 2021.12.06 |
KVO, Key-Value Observing (0) | 2021.12.06 |