檔案載入和儲存

2021-06-05 04:27:04 字數 1710 閱讀 4825

1、使用屬性列表儲存物件:

在cocoa中,與一類名為屬性列表的物件,常簡稱為plist。這些列表包含cocoa知道如何操作的一組物件。具體來講,cocoa知道如何將它們儲存到檔案中並進行載入。屬性列表類包括:nsarray,nsdictionary,nsstring和nsdata,以及它們的變體(mutable)

eg:

nsautoreleasepool *pool = [[nsautoreleasepool alloc] init];

nsarray *array = [nsarray arraywithobjects:@"first",

@"second",@"third",@"fourth",@"fifth",nil];

[array writetofile:@"array.plist" atomically:yes];

2、編碼物件

遺憾的是,無法總是將物件資訊表示為屬性列表類。如果能將所有物件都表示為陣列字典,我們就沒有必要使用自己的類了。所幸,cocoa具備一種機制來將物件自身轉化為某種格式並儲存到磁碟中。物件可以將它們的例項變數和其它資料編碼為資料塊,然後儲存到磁碟中。遺憾將這些資料塊讀到記憶體中,並且還能基於儲存的資料建立新物件。這個過程稱為編碼和解碼,或稱為序列化和反序列化。

通過nscoding協議,可以使用自己的物件實現相同功能,實現它的兩個方法:

- (void)encodewithcoder:(nscoder *)acoder;

- (id)initwithcoder:(nscoder *)adecoder;

nscoder是乙個抽象類,定義一些有用的方法來在物件與nsdata之間來回轉換。完全不需要建立新nscoder,因為它事件上並無多大作用。但是我們實際上要使用nscoder的一些具體子類來編碼和解碼物件。我們將使用其中兩個子類nskeyedarchiver和nskeyedunarchiver.

下面是乙個例子:

標頭檔案類bookobj.h的原始碼:

//

// bookobj.h

//#import @inte***ce bookobj:nsobject

@property (copy) nsstring *bookname;

@property (copy) nsstring *author;

-(id)initwithname:(nsstring *)name

author:(nsstring *) au ;

@end

實現類bookobj.m的原始碼:

//

// bookobj.m

//#import "bookobj.h"

@implementation bookobj

@synthesize bookname;

@synthesize author;

-(id)initwithname:(nsstring *)name

author:(nsstring *) au

return self;

}- (void)encodewithcoder:(nscoder *)acoder

- (id)initwithcoder:(nscoder *)adecoder

return self;

}int main(int argc ,const char *argv)

@end

IOS學習筆記 檔案載入和儲存

以下是將屬性列表檔案plist資料內容以二進位制形式寫入檔案的 void writecapitols void 如你所見,我們將陣列資料轉換成了nsdata型別並寫入了檔案中。將資料讀取回記憶體要多執行一步,即指定檔案的型別。我們建立了乙個指標,如果檔案格式與指定的型別不同,可以換用原格式型別的指標...

檔案載入和錯誤

檔案載入方式 1 inclue 2 inclue once 3 require 4 require once 區別 1 如果載入失敗inclue和require有不同的處理規則 如果被包含函式檔案不存在,即引用失敗時,inclue發出警告並繼續執行後續 require直接終止 2 如果載入重複inc...

OC學習(檔案載入與儲存)

cocoa提供了兩個處理檔案的通用類 屬性列表和物件編碼 在cocoa中,有一類名為屬性物件 property list 的物件,通常簡寫為plist。這些屬性列表類是nsarray nsdictionary nsstring nsnumber nsdate和nsdata,以及他們的可修改形態。ns...