-
[WWDC 21] ARC in Swift: Basics and beyondiOS/π¨π»π» WWDC μ ν ν¬μΈλ―Έλ 2022. 5. 15. 17:35
μμ½ π
ARC λ μ€λΈμ νΈ(μΈμ€ν΄μ€)μ life timeμ΄ λλ λ deallocate ν΄μ€λ€.
κ·Έλ λ€λ©΄ ARC λ μ€λΈμ νΈμ life time μ΄ λλμ§ μ΄λ»κ² μμ μλ κ²μΌκΉ? Referecne count λ₯Ό μΆμ νλ€.
ARC μ΅μ νμ μνμ¬, observed obejct life time κ³Ό guaranteed mininum object life time μ΄ λ€λ₯Ό μ μλ€.
Observed object life time μ λ―Έλμ μ€μννΈ μ»΄νμΌλ¬ ꡬνμ λ°λΌ λ³λ λ μ μμΌλ, μ΄κ²μ μμ‘΄νλ μ½λλ μ μ¬μ λ²κ·Έλ₯Ό ν¬ν¨ν κ²μ΄λ―λ‘ κ°λ₯ν μμ ν΄μΌνλ€.
ν€μλ μ€μ¬ μ 리 π
object life time
μ€μννΈμμ object life time μ μ¬μ© κΈ°λ° ( use-based ) μ΄λ€.
μ¬μ©(use) μ΄λ reference λ₯Ό ν΅ν΄ μ€λΈμ νΈμ μμ±μ μ κ·Όνκ±°λ, λ©μλλ₯Ό νΈμΆνλ νμλ₯Ό ν¬ν¨νλ€.
μ΅μ΄μ μ¬μ©μ init() μμ μμλλ€.
init() λμμ νμ μ€λΈμ νΈλ₯Ό μμ±νλ©°, reference count λ₯Ό 1λ‘ μ€μ νλ€.
reference λ₯Ό λ§μ§λ§μΌλ‘ μ¬μ©ν μ§ν, μ€λΈμ νΈμ life time μ μ’ λ£λλ€.
reference copy λμμ μ€λΈμ νΈμ μλ‘μ΄ reference λ₯Ό λ§λ€λ©°, reference count λ₯Ό 1 μ¦κ°μν¨λ€.
let obejct1 = SomeObject() let object2 = object1 //reference copy ...
retain, release
μ€μννΈ μ»΄νμΌλ¬κ° reference μ¬μ© κΈ°λ°μΌλ‘ μ½λμ μ λͺ λ Ήμ΄λ€μ μ½μ νλ€.
μλ‘μ΄ reference κ° μ¬μ© μμλκΈ° μ§μ , μ€μννΈ μ»΄νμΌλ¬λ retain λͺ λ Ήμ΄λ₯Ό μΆκ°νλ€.
retain λͺ λ Ήμ΄λ μ€λΈμ νΈμ reference count λ₯Ό 1 μ¦κ°μν¨λ€.
reference λ₯Ό λ§μ§λ§μΌλ‘ μ¬μ©ν μ§ν, μ€μννΈ μ»΄νμΌλ¬λ release λͺ λ Ήμ΄λ₯Ό μΆκ°νλ€.
release λͺ λ Ήμ΄λ μ€λΈμ νΈμ reference count λ₯Ό 1 κ°μμν¨λ€.
λ¨, init() μ μ€λΈμ νΈμ refCount λ₯Ό 1λ‘ μ€μ νλ―λ‘ λ°λ‘ retain λͺ λ Ήμ΄κ° μΆκ°λμ§ μλλ€.
{ let obejct1 = SomeObject() retain // object2μ reference κ° μμλλ―λ‘, μ»΄νμΌλ¬κ° μΆκ°νλ€. let object2 = object1 //reference copy release // object1 μ reference κ° μ’ λ£λμλ€. object2.someMethod() release // object2 μ reference κ° μ’ λ£λμλ€. }
observed life time
ARC μ μ΅μ ν λ±μ μ΄μ λ‘ λ³λμ μ΄λ€.
μ΄κ²μ μμ‘΄νλ μ½λλ₯Ό μμ±νλ©΄ μ μ¬μ λ²κ·Έλ₯Ό ν¬ν¨νλ κ²μ΄λ€.
weak, unowned λ₯Ό μ¬μ©νλ©΄ κ²½μ°μ λ°λΌ observed life time μ μμ‘΄νκ² λλ€.
νμ strong refernce λ₯Ό μ¬μ©νλ κ²μ΄ κ°μ₯ λͺ νν ν΄κ²°λ²μ΄λ€.
{ let obejct1 = SomeObject() object1.someMethod() release -------- guaranteed life time -------- // νμ§λ§ ARC μ΅μ νμ μν΄ μμ§ object1 μ΄ deallocated λμ§ μμ μ μκ³ , // λ°λΌμ μ΄ μμ μ object1 μ λ©λͺ¨λ¦¬ μ κ·Όμ΄ κ°λ₯ν μ μλ€. // μ΄ λ³΄μ₯λμ§ μμ μ κ·Ό κ°λ₯ μκ°μ observed life time μ΄λΌκ³ νλ€. }
guranteed minimum life time
initialization λΆν° μ€λΈμ νΈμ λν λͺ¨λ λ νΌλ°μ€μ λ§μ§λ§ μ¬μ© μμ κΉμ§λ₯Ό κ°λ¦¬ν¨λ€.
μ΄ life time μ κ³ μ μ μ΄κΈ° λλ¬Έμ μ¬κΈ°μ μμ‘΄νλ κ²μ λ¬Έμ κ° μλ€.
{ let obejct1 = SomeObject() object1.someMethod() release -------- guaranteed life time -------- // reference μ λ§μ§λ§ μ¬μ© μ§ν release λλ©°, object1 μ life time μ μ’ λ£λλ€. }
weak, unowned
reference count μ κ΄μ¬νμ§ μλλ€.
μ£Όλ‘ reference cycle μ λ°©μ§νκΈ° μν΄ μ¬μ©λλ€.
object life time μ νΉμ± λλ¬Έμ, μ¬μ©μ λ°λΌ potential bugs λ₯Ό ν¬ν¨ν μ μλ€.
weak νΉμ unowned μ μ¬μ© μ΄μ κ° λ¨μ§ reference cycle λ°©μ§ λͺ©μ μ΄λΌλ©΄, λμμ μ°Ύμμ μμ ν μ μλ€.
μμ) μ¬μ΄ν΄ κ΄κ³λ₯Ό νΈλ¦¬ κ΄κ³λ‘ λ³κ²½
μμ μ 체 μ 리 보λ¬κ°κΈ° ππ»
μ€λλ λλ μ±μ₯νλ€!!π₯
π€ [Back to the Basics] π»
μ£Όλμ΄ iOS κ°λ°μ μ°μ§±μ κΈ°μ λΈλ‘κ·Έμ λλ€.[μ°Έκ³ μλ£ ππ»βοΈ]
https://developer.apple.com/videos/play/wwdc2021/10216/
'iOS > π¨π»βπ» WWDC μ ν ν¬μΈλ―Έλ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[WWDC 20] Embrace Swift Type Inference (0) 2022.05.23