[iOS] Object Graphs μ Archives, κ·Έλ¦¬κ³ Serialization
μ΄ κΈμ ν΅ν΄ μκ² λλ κ²λ€
Apple 곡μ λ¬Έμμ λ±μ₯νλ Object Graph μ΄λ?
Archives λ?
Serialization μ΄λ?
κ°μ
μ κ° Object Graph λ₯Ό κ²μνκ² λ κ³κΈ°λ NSKeyedArchiver μ νμ λ©μλμΈ
archivedData(withRootObject:requiringSecureCoding:) μ μ€λͺ μμObject Graph λΌλ λ¨μ΄λ₯Ό λ°κ²¬νκΈ° λλ¬Έμ λλ€.
μ΄κ²μ νλ«νΌμ μ’ μμ μΈ μ©μ΄κ° μλκΈ° λλ¬Έμ
μ¬λ¬ κ°μ²΄ κ°μ κ΄κ³λ₯Ό κ°λ¦¬ν€λ κ°λ¦¬ν€λ κ·Έλν λΌλ μ λμ λλ΅μ μΈ κ°λ μ μκ³ μμμ§λ§, μ ν 곡μ λ¬Έμμμ μ€λͺ νλ μλ£λ₯Ό μ°Ύκ³ μΆμμ΅λλ€.
λ§μΉ¨ κ·Έλ° λ¬Έμκ° μμκ³ , μ΄ λ¬Έμλ₯Ό μ 리νκ² λμμ΅λλ€.
μΆκ°μ μΌλ‘ Archives μ Serialization λ₯Ό λΉκ΅νλ λ΄μ©λ μ κ² λμμ΅λλ€.
Object Graphs
κ°μ²΄ μ§ν₯ μ΄ν리μΌμ΄μ μμλ μ°κ΄λ μ€λΈμ νΈ λΌλ¦¬ λ§€μ° λ³΅μ‘ν κ΄κ³ (web) μ μ΄λ£¨κ³ μμ΅λλ€.
μ€λΈμ νΈλ€μ λ€λ₯Έ μ€λΈμ νΈλ₯Ό μμ νκ±°λ ν¬ν¨νκ³ μκΈ°λ νκ³ , λλ κ·Έ μ€λΈμ νΈμ μ°Έμ‘°λ₯Ό κ°μ§κ³ μμΌλ©΄μ λ©μμ§λ₯Ό μ λ¬ν©λλ€. :: κ°μ²΄λ€ κ°μ μκΈΈ μ μλ κ΄κ³λ₯Ό μ€λͺ
// μ€λΈμ νΈλ₯Ό μμ νκ³ μλ€.
class A {
var b: B = B()
func call() {
print("What's wrong")
}
}
// μ€λΈμ νΈμ μ°Έμ‘°λ₯Ό κ°μ§κ³ μλ€.
class B {
var a: A
init(a: A) {
self.a = a
}
func callA() {
a.call() // λ©μμ§ μ λ¬
}
}
var a = A()
var b = B(a: a)
μ΄λ° λ§€μ° λ³΅μ‘ν κ΄κ³ (web) μ Object graph λΌκ³ λΆλ¦ λλ€.
μ μ μμ μ€λΈμ νΈλ€μ κ΄κ³λ§ νννλλΌλ , νλμ μ΄ν리μΌμ΄μ μ Object graph λ κ°κ°μΈμ μ€λΈμ νΈκ°μ μν μ°Έμ‘°λ₯Ό κ°μ§κ±°λ μ¬λ¬ κ°μ μ°κ²°λ€λ‘ μ½ν ꡬμ±λμ΄μμ΅λλ€.
μ κ·Έλ¦Όμ Cocoa κΈ°λ°μ λ§₯μ© μ΄ν리μΌμ΄μ μ Object graph λ₯Ό μΆμν νκ²μ λλ€.
μ°λ¦¬λ μ΄λ° κ΄κ³λ₯Ό κ°μ§λ κ·Έλνλ₯Ό Object graph λΌκ³ λνλμ μκ² λμμ΅λλ€.
κ·Έλ°λ° μ΄λ° μ€λΈμ νΈλ€μ κ΄κ³λ₯Ό 보쑴ν μ±λ‘ νμΌμ μ μ₯ν μ μλ νμμ΄λ λ€λ₯Έ νλ‘μΈμ€λ κΈ°κΈ°μ μ λ¬ν μ μλ νμμΌλ‘ λ³ννκ³ μΆμ μ μμ΅λλ€. :: λ€λ₯Έ νμμΌλ‘μ λ³νμ μΈμ½λ©, λμ½λ©κ³Ό κ΄λ ¨λ κ°λ μ΄μ£ ?
μλ₯Ό λ€μ΄ Nib νμΌκ³Ό Property list λ object graph λ₯Ό νμΌ ννλ‘ μ μ₯ν μ μλ μλ¨μ λλ€.
:: κ·Έλ°λ° Nib νμΌμ νμ¬ xib λ Storyboard νμΌλ‘ λ체λμμ΅λλ€. μννλ κΈ°λ₯μ μ μ¬ν©λλ€!
Nib file λ μ± UI λ₯Ό ꡬμ±νλ μ€λΈμ νΈ κ°μ 볡μ‘ν κ΄κ³λ₯Ό ννν μ μλ μμΉ΄μ΄λΈ(archives) μ λλ€.
μλ₯Ό λ€λ©΄ window μ λ·° κ³μΈ΅ κ΅¬μ‘°κ° μμ΅λλ€.
βοΈβοΈβοΈ
μμΉ΄μ΄λΈλ μμΉ΄μ΄λΉμ κ²°κ³Όλ¬Όμ΄κ³ , μμΉ΄μ΄λΉμ λ©λͺ¨λ¦¬κ° μλ λμ€ν¬μ νμΌ ννλ‘ μ μ₯νλ λμμ λλ€.
κ·Έλ¦¬κ³ μμΉ΄μ΄λΉμλ λμ κ°μ²΄μ Encoding κ³Όμ μ΄ ν¬ν¨λμ΄μμ΅λλ€.
Property list λ serialization μ λλ€. basic value μ€λΈμ νΈ κ°μ κ°λ¨ν κ³μΈ΅ κ΄κ³λ₯Ό μ μ₯ν©λλ€.
κ΄λ ¨ μ¬μ§:
κ΄λ ¨ μ€λͺ κΈ:
Archives
μμΉ΄μ΄λΈ(archive) λ 볡μ‘ν Object grapth λ₯Ό μ μ₯ν μ μμ΅λλ€.
μμΉ΄μ΄λΈλ κ·Έλν μμ λͺ¨λ μ€λΈμ νΈμ μμ΄λ΄ν°ν°μ λ€λ₯Έ μ€λΈμ νΈμμ κ΄κ³λ₯Ό μ λΆ μ μ₯ν©λλ€.
Unarchived λ λ, μ¬κ΅¬μ±λ Object graph λ λͺκ°μ§ μμΈμ¬νμ μ μΈνκ³ λͺ¨λ κ΄κ³λ₯Ό μ νν 보쑴νκ³ μμ΄μΌν©λλ€.
μ°λ¦¬μ μ΄ν리μΌμ΄μ μ μμΉ΄μ΄λΈλ₯Ό λ°μ΄ν° λͺ¨λΈμ μ μ₯μλ‘ μ¬μ©ν μ μμ΅λλ€.
μ°λ¦¬λ λ°μ΄ν°μ μ μ₯μ μν νΉλ³ν νμμ μ§μ λ°λ‘ μ€κ³ν νμκ° μμ΅λλ€.
λμ Cocoa μμ μ΄λ―Έ ꡬνν΄λμ λꡬλ€μ μ¬μ©νμ¬ μ€λΈμ νΈλ€μ λ°λ‘ μμΉ΄μ΄λΉ ν μ μμ΅λλ€.
μμΉ΄μ΄λΉμ μ§μνκΈ° μν΄μ, μ€λΈμ νΈλ NSCoding νλ‘ν μ½μ μ±μ©ν΄μΌ ν©λλ€.
μ΄ νλ‘ν μ½μ μ΄μ κΈμμ μμΈνκ² μ€λͺ νμμ΅λλ€.
:: μ΄μ κΈ : [iOS] NSCoding μ΄λ?
Foundation μ λͺ¨λ value objects (NSString, NSArray, NSNumber, and so on) λ NSCoding μ μ±ννκ³ μμ΅λλ€.
π‘μ°Έκ³
μμΈν μ νμλ μμ§λ§, value object λ string, number, date μ κ°μ λ¨μν νμ μ ν΄λμ€λ‘ λνν νμ μ΄λΌκ³ ν©λλ€. Objective-Cμ κ°λ μ λλ€. (μκΈ°λ‘ Obj-C μλ κ΅¬μ‘°μ²΄κ° μμ)
Serializations ( μ μ΄ν΄ κ°μ§ μλ λΆλΆμ΄ μμ π€)
Serialization μ value objectμ λ¨μν κ³μΈ΅λ§ μ μ₯μ νλλ°, μ€λΈμ νΈμ κ°κ³Ό κ³μΈ΅μμμ μμΉλ§ μ μ₯ν©λλ€.
Array μ Dictionary κ°μ λ¨μν κ³μΈ΅ ꡬ쑰, Propery List λ μ΄ λ κ°μ 컬λ μ μ ν¬ν¨νμ¬ Bool, Data, Date, String, Number νμλ§ μΆκ° κ°λ₯νλ€. μ ν μν λ±μ 볡μ‘ν κ³μΈ΅ κ΅¬μ‘°κ° λμ¬ μ μμ.
Serialization μ λνμ μΈ μλ‘λ Property lists κ° μμ΅λλ€.
μλ₯Ό λ€μ΄ μ±μ μμ±μ Info.plist μ μ μ₯λκ³ , μ¬μ©μμ μ€μ λ΄μ© κ°μ κ²μ property lists μ μ μ₯λ μ μμ΅λλ€.
Multiple references to the same value object might result in multiple objects when deserialized.
κ°λ³μ±μ μ μ₯λμ§ μμ΅λλ€.
λ!
π€π’[μ°μ§±μ iOS λΈλ‘κ·Έ]π΅π»
iOSλ₯Ό 곡λΆνλ©΄μ λ°°μ΄ λ΄μ©μ κΈ°λ‘νκ³ μμ΅λλ€.
μ°Έκ³ μλ£: https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Archiving/Articles/objectgraphs.html