-
Closure Capture List - MemoryiOS/π Swift 2021. 1. 5. 13:49
μΈμ μ΄ μ΄μλ₯Ό μ λ ν΄μΌ ν κΉ
ν΄λ‘μ λ₯Ό μΈμ€ν΄μ€ μμ±μ μ μ₯ν λμ λλ€.
λ°μνλ μν©
ν΄λ‘μ μ κ°ν μ°Έμ‘° μνμ λ€μ μν©μ λ°μν©λλ€.
1. ν΄λ‘μ κ° μΈμ€ν΄μ€μ νλ‘νΌν°μΌ λ
2. ν΄λ‘μ μ κ° νλ μν©
ν΄λ‘μ λ΄λΆμμ self.(propertyName)μ΄λ, self.(methodName)μ²λΌ μΈμ€ν΄μ€μ μμ±μ΄λ λ©μλλ₯Ό νΈμΆν λ,
ν΄λ‘μ λ selfλ₯Ό νλνλ―λ‘ κ°ν μ°Έμ‘° μνμ΄ λ°μν©λλ€.
λ¬Έμ λ ν΄λ‘μ κ° νλν μΈμ€ν΄μ€μ μ°Έμ‘° μΉ΄μ΄νΈλ₯Ό μ¦κ°μμΌ λ©λͺ¨λ¦¬ ν΄μ λ₯Ό λ°©μ§νλ€λ κ²μ λλ€. μ¦, κ°ν μ°Έμ‘°λ₯Ό μ μ§νκ² λ©λλ€.
λ¨, ν΄λ‘μ λ΄λΆμμ self μμ±μ μ¬λ¬ λ² νΈμΆνμ¬ μ κ·Όνλ€κ³ ν΄λ μ°Έμ‘° νμλ ν λ²λ§ μ¦κ°νλ€κ³ ν©λλ€.μμ κΈμμλ μ°Έμ‘° νμ μ μΈμ€ν΄μ€μ μ°Έμ‘° νμ μΈμ€ν΄μ€ λλ¬Έμ κ°ν μ°Έμ‘° μνμ΄ λ°μνμμ΅λλ€.
ν΄λ‘μ λ μ°Έμ‘° νμ μ΄κΈ° λλ¬Έμ κ°μ μν©μ΄ λ°μνλ€κ³ μκ°ν μ μμ΅λλ€.
ν΄κ²° λ°©λ²
ν΄κ²°λ°©λ²μ Closure Capture Listλ₯Ό μ¬μ©νλ κ²μ λλ€.
μ΄κ²μ μ¬μ©νλ©΄ ν΄λ‘μ κ° λ€λ₯Έ μΈμ€ν΄μ€μ μ°Έμ‘°λ₯Ό νλν λ, κ°ν μ°Έμ‘° λμ μ½ν μ°Έμ‘°λ λ―Έμμ μ°Έμ‘°λ₯Ό ν μ μκ² μ€μ ν μ μμ΅λλ€.
Syntax
Closure Capture Listλ 리μ€νΈ λ΄μ λͺ μν κ°λ€μ νλνλλ°, κ°μ νμ μ λ°λΌ λμμ΄ μ‘°κΈ λ€λ¦ λλ€.
μ°μ κ° νμ μΌ λ, νλν λΉμμ κ°μ μΊ‘μ²νμ¬ μλ‘μ΄ μμλ‘ μ΄κΈ°νν©λλ€.
λ°λΌμ ν΄λ‘μ λ΄μμ κ°μ λ³κ²½νλ€κ³ ν΄λ, μ€μ λ³μμλ μν₯μ΄ μμ΅λλ€.
κ°μ Capture Listμ λ£μ§ μμΌλ©΄ μλ‘μ΄ μμλ‘ μ΄κΈ°νλμ§ μκΈ° λλ¬Έμ, ν΄λ‘μ λ°λμμμ λ³κ²½μ΄ μ€μ λ‘ λ°μλ©λλ€.
μ°Έμ‘° νμ μΌ λλ λκ°μ΄ μμλ‘ μ΄κΈ°ν νμ§λ§, μ°Έμ‘° νμ μ΄λ―λ‘ κ·Έ μμ±μ λ³κ²½ν μ μκ³ μ€μ λ‘ λ°μλ©λλ€.
κ΄λ ¨ κΈ: κ° νμ vs μ°Έμ‘° νμ
λ€λ§ μ°Έμ‘° νμ μμλ κ·Έ κ°μ μ΄λ»κ² νλν κ²μΈμ§ μ ν΄μ€ μ μμ΅λλ€. (κ°ν μ°Έμ‘°, μ½ν μ°Έμ‘°, λ―Έμμ μ°Έμ‘°)
λ°©λ²μ ν΄λ‘μ λ΄λΆμ 첫 λΆμ ` [ μ°Έμ‘° λ°©λ² + μΊ‘μ²ν κ°... ] in ` ννλ‘ μ μ΄μ£Όλ©΄ λ©λλ€.
class Person { let name: String let age: Int /* 1 */ lazy var makeProfile: () -> String = {[weak self] in /* 2 */ return "Name: \(self?.name)\nAge:\(self?.age)" } init(name: String, age: Int) { self.name = name self.age = age } }
/* 1 */ μμ lazy (μ§μ° μ μ₯ μμ±)λ₯Ό λΆμ¬μ€ μ΄μ λ ν΄λ‘μ κ° μ€νλ μμ μ λ€λ₯Έ μμ±μ΄ μμ§ μ΄κΈ°νλμ§ μμκΈ° λλ¬Έμ μ΄λ€ μμ±μλ μ κ·Όν μ μκΈ° λλ¬Έμ λλ€.
κ΄λ ¨ κΈ: selfμ μ κ·Ό κ°λ₯ μμ
/* 2 */ μμ μ΅μ λ μΈλνμ ν΄μ€ μ΄μ λ, self μμ±μ weakμΌλ‘ μΊ‘μ²νκΈ° λλ¬Έμ λλ€. μ½ν μ°Έμ‘°λ μ΅μ λ νμ μ λλ€.
λ!
'iOS > π Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] νλ‘ν μ½ μμ± μꡬμ¬ν (Property Requirements) (0) 2021.01.15 [Swift] νλ‘ν μ½ κ°μ (Protocol Overview) (0) 2021.01.15 Memberwise Initializer - Initializer (0) 2021.01.05 Initializers - Initializer (0) 2021.01.05 Strong Reference Cycle - Memory (0) 2021.01.03