Serializacja w programowaniu komputerów proces przekształcania obiektów, tj. instancji określonych klas, do postaci szeregowej, czyli w strumień bajtów, z zachowaniem aktualnego stanu obiektu (…)
Serializacja służy do zapisu stanu obiektu, a później do odtworzenia jego stanu.
Źródło wikipedia: Serializacja
@import <Foundation/CPObject.j> @import "Person.j" @implementation AppController : CPObject { CPWebView webView; CPWebView _webView; CPProgressIndicator theProgressIndicator; } - (void)applicationDidFinishLaunching:(CPNotification)aNotification { var kowalski = [Person personWithName:@"Kowalski"]; [kowalski setJobTitle:@"Inżynier" company:@"Nazwa firmy jest bardzo ÓŁĘĆŚ"]; var data = [CPKeyedArchiver archivedDataWithRootObject:kowalski]; console.log(@"kowalski:" + [kowalski description]); // kowalski:name: Kowalski jobTitle: Inżynier company: Nazwa firmy jest bardzo ÓŁĘĆŚ console.log(@"[data string]: " + [data string]); // [data string]: 280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;6;PersonK;8;$classesA;S;6;PersonS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;4;nameD;K;6;CP$UIDd;1;3E;K;8;jobTitleD;K;6;CP$UIDd;1;4E;K;7;companyD;K;6;CP$UIDd;1;5E;E;S;8;KowalskiS;8;InżynierS;29;Nazwa firmy jest bardzo ÓŁĘĆŚE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; console.log([data plistObject]); // objj_dictionary console.log(@"[[data plistObject] description]: " + [[data plistObject] description]); /* [[data plistObject] description]: CPDictionary { $version:100000 $archiver:CPKeyedArchiver $objects:($null, CPDictionary { $classes:(Person, CPObject) $classname:Person }, CPDictionary { company:CPDictionary { CP$UID:5 } jobTitle:CPDictionary { CP$UID:4 } name:CPDictionary { CP$UID:3 } $class:CPDictionary { CP$UID:1 } }, Kowalski, Inżynier, Nazwa firmy jest bardzo ÓŁĘĆŚ) $top:CPDictionary { root:CPDictionary { CP$UID:2 } } } */ console.log([[CPObject alloc] init]); // objj_object console.log([[[CPObject alloc] init] description]); // <CPObject 0x00100b> console.log([data plistObject]); // objj_dictionary var newData = [CPData dataWithString:[data string]]; var clone = [CPKeyedUnarchiver unarchiveObjectWithData:newData]; console.log(@"clone:" + [clone description]); // clone:name: Kowalski jobTitle: Inżynier company: Nazwa firmy jest bardzo ÓŁĘĆŚ // Gdy nie zostanie załączona klasa Person clone object będzie nil. var code = @"280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;6;PersonK;8;$classesA;S;6;PersonS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;4;nameD;K;6;CP$UIDd;1;3E;K;8;jobTitleD;K;6;CP$UIDd;1;4E;K;7;companyD;K;6;CP$UIDd;1;5E;E;S;8;KowalskiS;8;InżynierS;29;Nazwa firmy jest bardzo ÓŁĘĆŚE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;"; code = [CPData dataWithString:code]; var clone = [CPKeyedUnarchiver unarchiveObjectWithData:code]; console.log(@"clone:" + [clone description]); // clone:name: Kowalski jobTitle: Inżynier company: Nazwa firmy jest bardzo ÓŁĘĆŚ } @end
@implementation Person : CPObject { CPString name; CPString jobTitle; CPString company; } + (id)personWithName:(CPString)aName { return [[self alloc] initWithName:aName]; } - (id)initWithName:(CPString)aName { self = [super init]; if (self) { name = aName; jobTitle = @""; company = @""; } return self; } - (void)setName:(CPString)aName { name = aName; } - (CPString)name { return name; } - (void)setJobTitle:(CPString)aJobTitle company:(CPString)aCompany { jobTitle = aJobTitle; company = aCompany; } -(CPString) description { return [[CPString alloc] initWithFormat:@"name: %@ jobTitle: %@ company: %@", name, jobTitle, company]; } - (void)encodeWithCoder:(CPCoder)coder { [coder encodeObject:name forKey:@"name"]; [coder encodeObject:jobTitle forKey:@"jobTitle"]; [coder encodeObject:company forKey:@"company"]; } -(id)initWithCoder:(CPCoder)coder { if (self = [super init]) { name = [coder decodeObjectForKey:@"name"]; jobTitle = [coder decodeObjectForKey:@"jobTitle"]; company = [coder decodeObjectForKey:@"company"]; } return self; } @end