1. 程式人生 > >iOS 資料的儲存和讀取之歸檔

iOS 資料的儲存和讀取之歸檔

歸檔四一種很常見的檔案儲存方法,幾乎任何型別的物件都能夠被歸檔儲存(實際上是一種檔案儲存形式)。

使用NSKeyedArichiver進行歸檔,用NSKeyedUnarichiver進行解歸檔。這種方式會在寫入、讀出資料之前堆資料進行序列化、反序列化操作。

一,簡單歸檔 archiveRootObject

(1),歸檔

  1. NSString *homeDictionary = NSHomeDirectory();//獲取根目錄
  2. NSString *homePath  = [homeDictionary stringByAppendingPathComponent:@"test.archiver"
    ];//新增儲存的檔名
  3. BOOL flag = [NSKeyedArchiver archiveRootObject:@”歸檔測試” toFile:homePath];//歸檔一個字串

(2),解歸檔

[NSKeyedUnarchiver unarchiveObjectWithFile:homePath] ;

缺點:只能把一個物件歸檔進一個檔案中。


二,歸檔多個物件

舉例:歸檔CGPoint點、字串和整數,使用encode方法進行,最後再寫入檔案;

(1),歸檔

  1. //歸檔資料
  2. CGPoint point = CGPointMake(320.0, 480.0);  
  3. NSString *info = @"歸檔測試"
    ;  
  4. NSInteger value = 1000;  
  5. NSString *multiHomePath = [NSHomeDirectory() stringByAppendingPathComponent:@"multiTest.archiver"];  
  6. NSMutableData *data = [[NSMutableData alloc]init];  
  7. NSKeyedArchiver *archvier = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];  
  8. //對多個物件進行歸檔
  9. [archvier encodeCGPoint:point forKey:@"kPoint"
    ];  
  10. [archvier encodeObject:info forKey:@"kInfo"];  
  11. [archvier encodeInteger:value forKey:@"kValue"];  
  12. [archvier finishEncoding];  
  13. [data writeToFile:multiHomePath atomically:YES]; 

(2),解歸檔

  1. NSMutableData *dataR = [[NSMutableData alloc]initWithContentsOfFile:multiHomePath];  
  2. NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:dateR];  
  3. CGPoint pointR = [unarchiver decodeCGPointForKey:@"kPoint"];  
  4. NSString *infoR = [unarchiver decodeObjectForKey:@"kInfo"];  
  5. NSInteger valueR = [unarchiver decodeIntegerForKey:@"kValue"];  
  6. [unarchiver finishDecoding];  
  7. NSLog(@"%f,%f,%@,%d",pointR.x,pointR.y,infoR,valueR);  

限制:歸檔的都是一些基本資料型別。