ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] Key Value Observing (KVO)
    Swift 2022. 3. 24. 09:32

    Key Value Observing (KVO)

    • A κ°μ²΄μ—μ„œ B 객체의 ν”„λ‘œνΌν‹°κ°€ 변화됨을 감지할 수 μžˆλŠ” νŒ¨ν„΄
    • KVO νŒ¨ν„΄μ€ 객체와 객체 μ‚¬μ΄μ˜ 관계λ₯Ό λ‹€λ£¨λŠ”λ° μ ν•©ν•˜λ‹€.
    • λ©”μ†Œλ“œλ‚˜ λ‹€λ₯Έ μ•‘μ…˜μ—μ„œ λ‚˜νƒ€λ‚˜λŠ” 것이 μ•„λ‹Œ ν”„λ‘œνΌν‹°μ˜ μƒνƒœμ— λ°˜μ‘ν•˜λŠ” ν˜•νƒœμ΄λ‹€.
    • νƒ€μž… μ •μ˜ 외뢀에 μ˜΅μ €λ²„λ₯Ό μΆ”κ°€ν•˜λŠ” 것을 μ œμ™Έν•˜λ©΄, property observer (willSet, didSet)κ³Ό μœ μ‚¬ν•˜λ‹€.
    • Dynamic Dispatch
      • ν‚€ 패슀 (KeyPath = \.) 이름을 톡해 ν”„λ‘œνΌν‹°μ˜ μ£Όμ†Œ μ°ΎλŠ” κΈ°λŠ₯
      • ν‚€ νŒ¨μŠ€λŠ” ν”„λ‘œνΌν‹°λ‚˜ λ©”μ†Œλ“œ 등을 νŠΉμ • λ¬Έμžμ—΄λ‘œ ν‘œκΈ°ν•˜λŠ” κ·œμΉ™μ΄λ‹€.

    μ‚¬μš©λ²•

    1. μ„ μ–Έ

    class Person: NSObject {
        @objc dynamic var name = "Selina"
    }
    

    2. observe() ν˜ΈμΆœν•˜μ—¬ 이벀트 ꡬ독

    μƒˆλ‘œμš΄ 값이 λ“€μ–΄μ˜€κ²Œ 되면, κ·Έ μ¦‰μ‹œ 이름을 좜λ ₯ν•œλ‹€.

    let person = Person()
    
    person.observe(\\Person.name, options: .new) { person, change in
        print("I'm now called \\(person.name)")
    }
    

    3. λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œ λ³€κ²½ν•˜κΈ°

    μ•„λž˜μ²˜λŸΌ λ³€κ²½ν•˜λ©΄, 이제 "I'm now called TAEYEON"이 좜λ ₯될 것이닀.

    person.name = "TAEYEON"
    

    Options

    • old : λ³€κ²½ μ „μ˜ 값을 dictionary둜 λ‹΄λŠ”λ‹€.
    • new : λ³€κ²½ ν›„μ˜ 값을 dictionary둜 λ‹΄λŠ”λ‹€.
    • initial : μ˜΅μ €λ²„ 등둝 λ©”μ†Œλ“œκ°€ λ¦¬ν„΄λ˜κΈ° 전에 μ˜΅μ €λ²„μ—κ²Œ μ•Œλ¦Όμ„ μ „μ†‘ν•œλ‹€.
    • prior : λ³€κ²½ λ°œμƒ μ‹œ, 단일 μ•Œλ¦Ό λŒ€μ‹  λ³€κ²½ 전후에 μ•Œλ¦Όμ„ λ³„λ„λ‘œ 보낸닀.

    μž₯점

    • Modelκ³Ό View와 같이 λ…Όλ¦¬μ μœΌλ‘œ λΆ„λ¦¬λœ 파트 κ°„μ˜ 변경사항을 μ „λ‹¬ν•˜λŠ”λ° μœ μš©ν•˜λ‹€.
    • 두 객체 μ‚¬μ΄μ˜ 정보λ₯Ό λ§žμΆ°μ£ΌλŠ” 것이 쉽닀.
    • new/old valueλ₯Ό μ‰½κ²Œ 얻을 수 μžˆλ‹€.
    • key path둜 observingν•˜κΈ° λ•Œλ¬Έμ— nested objects λ˜ν•œ observingν•  수 μžˆλ‹€.

    단점

    • Objective-C λŸ°νƒ€μž„μ— μ˜μ‘΄ν•˜κΈ° λ•Œλ¬Έμ— μˆœμˆ˜ν•œ Swift μ½”λ“œμ—μ„œλŠ” κ·Έλ‹€μ§€ μ’‹μ§€ μ•Šλ‹€.
    • NSObjectλ₯Ό μƒμ†λ°›λŠ” ν΄λž˜μŠ€μ—μ„œλ§Œ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.
    • objc dynamic 속성을 λΆ™μ—¬μ€˜μ•Όν•œλ‹€.
    • deallocν•  λ•Œ μ˜΅μ €λ²„λ₯Ό μ§€μ›Œμ€˜μ•Όν•œλ‹€.
    • λ§Žμ€ valueλ₯Ό 감지할 λ•Œμ—λŠ” λ§Žμ€ 쑰건문이 ν•„μš”ν•˜λ‹€.
    • μ• ν”Œμ€ ν–₯ν›„ UIKitκ³Ό KVO의 ν˜Έν™˜μ„±μ— λŒ€ν•΄ 보μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.

    Apple Developer Documentation

    What is key-value observing?

    λŒ“κΈ€

Designed by Tistory.