[UIKit] init(frame: ), init(coder: ) μ΄λμ λΌμ΄μ
UIKitμ μ¬μ©ν΄μ μ±μ λ§λ€ λ μλ μ½λλ₯Ό νμμ μΌλ‘ μ μ΄μΌλ§ νλ€. κ³Όμ° μ΄ μ½λκ° μλ―Ένλκ² λκ³ μ μ μ΄μΌν κΉ?
π£ μμμ½λ
init(frame: CGRect, data: Data) {
self.data = data
super.init(frame: frame)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
- μ¬κΈ°μ μ§μ ν΄μ€ initμ λκΉ?
π£ init(frame: )
https://developer.apple.com/documentation/uikit/uiview/1622488-init
Apple Developer Documentation
developer.apple.com
πͺ 곡μλ¬Έμλ₯Ό λ¨Όμ μ΄ν΄λ³΄λ©΄ μλμ κ°μ΄ μ μλμ΄ μλ€.
ππ» Initializes and returns a newly allocated view object with the specified frame rectangle.
→ μ§μ λ νλ μ μ§μ¬κ°νμ μ¬μ©νμ¬ μλ‘ ν λΉλ λ·° κ°μ²΄λ₯Ό μ΄κΈ°ννκ³ λ°νν©λλ€.
πͺ μ€λͺ
μ½λλ‘ UIView Classμ View μΈμ€ν΄μ€λ₯Ό λ§λ€κΈ° μν΄ μ§μ λ μ΄λμ λΌμ΄μ
→ Frame rectangleμ κ°μ§κ³ ꡬννκ³ μ νλ λ·°μ μ€μ¬κ³Ό κ²½κ³μ μ μ§μ ν΄μ€λ€. μ€ν 리보λ, xib, nib κ°μ μΈν°νμ΄μ€ λΉλλ₯Ό μ¬μ©νμ§ μκ³ μ½λλ‘ UIView Calssμ View objectλ₯Ό λ§λ€κΈ° μν΄ μ§μ λ μ΄λμ λΌμ΄μ λ€.
π£ init(coder: )
https://developer.apple.com/documentation/foundation/nscoding/1416145-init
Apple Developer Documentation
developer.apple.com
πͺ 곡μλ¬Έμλ₯Ό λ¨Όμ μ΄ν΄λ³΄λ©΄ μλμ κ°μ΄ μ μλμ΄ μλ€.
ππ» Returns an object initialized from data in a given unarchiver.
→ μ§μ λ unarchiverμ λ°μ΄ν°μμ μ΄κΈ°νλ κ°μ²΄λ₯Ό λ°νν©λλ€.
πͺ unarchaiverκ° λκΉ?
UIKitμμλ storyboardμ xibλ₯Ό νμ©ν΄μ viewλ₯Ό λ§λ€ μ μλ€. μ΄ ν΄μ νμ©νλ©΄ λ³λμ μ½λ μμ± μμ΄ μ±μ μμ±μ μμ ν μ μλλ° μ΄κ²μ κ°λ₯νκ² ν΄μ£Όλ κ²μ unarchiving μ΄λΌκ³ νλ€.
μ΄ ν΄λ€μ (interface builder) μ½λκ° μλκΈ° λλ¬Έμ μ±μ μ»΄νμΌ νλ μμ μμ μ»΄νμΌλ¬κ° μΈμν μ μκ³ μ΄λ₯Ό μ½λλ‘ λ³νν΄μ£Όλ unarchiving κ³Όμ μ΄ νμνλ€. → μ΄ κ³Όμ μμ λ°λ‘ init(coder: )κ° νμνλ€!
πͺ init(coder: )
νλΌλ―Έν° coderλ₯Ό ν΅ν΄μ NSCoder νμ μ κ°μ²΄κ° μ λ¬λλ€. μ λ¬λ NSCoderνμ μ κ°μ²΄κ° decodingλμ΄ μ΄κΈ°νλ ν μ»΄νμΌ ν μ μκ² decodingλ μκΈ°μμ (self)μ λ°ννλ μμ μ΄λΌκ³ 보면 λλ€.
μ§μ ꡬμ±ν Viewμ μνλ₯Ό μ±μ diskμ μ μ₯νλ κ³Όμ μ serializeλΌκ³ νλ€. deserializeλ λ°λλ‘ diskμ μ μ₯λ μνλ₯Ό λΆλ¬μ€λ μμ μ΄λΌκ³ λ³Ό μ μλ€. NSCodingμ΄λΌλ νλ‘ν μ½μ ν΅ν΄ μ΄ serializeμ deserialize μμ μ΄ κ°λ₯ν΄μ§λ€.
μ¦ μ 리νμλ©΄ μλμ κ°λ€.
β StoryboardλΌλ μΈν°νμ΄μ€ λΉλλ₯Ό μ¬μ©νμ¬ λ·°μ μνλ₯Ό μμ ν κ²½μ° serialization μμ μ Xcodeκ° init(coder:)λ₯Ό νΈμΆνμ¬ μ± λ΄ λ·° μμ μ μ μ₯νκ³ λΆλ¬μ€λ μμ μ ν΄μ€λ€.
πͺ requieredλ‘ μ μΈλ μ΄μ ?
UIView μ μΈλΆλ₯Ό 보면 NSCoding νλ‘ν μ½μ μ±ννκ³ μλλ° NSCoding μ μΈλΆλ₯Ό μ΄ν΄λ³΄λ©΄ μ€ν¨κ°λ₯ν μ΄λμ λΌμ΄μ λ₯Ό μμ±νλλ‘ λμ΄μλ€.
νλ‘ν μ½μ μ€μνλ ν΄λμ€μμ νλ‘ν μ½μμ μꡬνλ μ΄λμ λΌμ΄μ μꡬμ¬νμ ꡬννλ €λ©΄ required ν€μλκ° λΆμ΄μΌ νλ€.
λ°λΌμ μ΄λ₯Ό μμλ°μ 컀μ€ν λ·°μ κ°μ ν΄λμ€μμλ μ€ν 리보λλ₯Ό μ¬μ©νκ³ μμ§ μμ§λ§ init?(coder:)λ₯Ό ꡬνν΄μ€μΌ νκ³ μμ κΌ requiredλ₯Ό λΆμ¬μ£Όμ΄μΌ νλ€. π code-base μΈλ° init(coder: )κ° νμν μ΄μ
π Reference
https://leeari95.tistory.com/63?category=961651
[iOS/UIKit] init(frame:)μ init(coder:)
UIView μμλ₯Ό μ½λλ‘ μ§μ 컀μ€ν νμ¬ μ¬μ©νκΈ° μν΄ λ§λ€λ μμ€μ override μ΄λμ λΌμ΄μ μ required μ΄λμ λΌμ΄μ , μ΄ 2κ°μ μ΄λμ λΌμ΄μ λ₯Ό μ μν΄μΌνλ€λ κ²μ μκ²λμλ€. override init(frame: CGRec
leeari95.tistory.com
https://velog.io/@inwoodev/iOS-initframe-initcoder
[iOS] init(frame:), init(coder:)
μ€ν 리보λ μμ΄ μ±μ λ§λ€λ€ 보면 μλμ κ°μ override init(frame:) κ³Ό required init?(coder:) μ΄ νμν κ²μ μ μ μλ€.λ¨μν νμν΄μ μ»μμ§ μ νμνμ§λ μ λλ‘ μμλ³΄μ§ μμ κ² κ°μμ 곡λΆν
velog.io