2011-12-11 47 views
0

我有一個模型類實現了NSCoding協議。我有一個名爲dataModel的屬性,它是這個類的一個實例。當我將此實例保存/加載到磁盤/從磁盤加載時,是否應該直接使用dataModel或ivars的合成存取器?爲什麼?使用NSKeyedArchiver時,您應該使用訪問器還是ivars?

這是iOS 5及ARC下,我的屬性被聲明爲:

@property (strong, atomic) QardDataModel *dataModel; 

爲了說明這將是這樣做的訪問方式:

-(void)saveData { 
    [NSKeyedArchiver archiveRootObject:self.dataModel toFile:[self saveFilePath]]; 
} 

-(void)loadData { 
    self.dataModel = [NSKeyedUnarchiver unarchiveObjectWithFile:[self saveFilePath]]; 
} 

有一種簡便方法稱爲saveFilePath,它返回存檔文件的路徑。

回答

1

,然後有一個很輕微的性能優勢直接訪問變量。

但是,如果你有這麼多的數據,通常它不適合可用RAM,所以你應該使用SQLite或核心數據。

但是,如果您反覆對許多小物體(數十萬次)進行存檔和取消存檔,那麼您應該使用「工具」來檢查objc_msg_send是否是性能拖延。直接訪問變量是解決這個問題的方法。

除此之外,由於各種原因(它們都不是特別重要),使用訪問器方法通常會更好。

1

它絕對沒有區別。

(雖然你可能會稍微更方便找到存取,因爲你並不需要一個明確的retain)如果你正在存檔/解除存檔的數據集數以百萬計的對象

+1

保留?我認爲保留/發佈已被棄用或ARC? – lms

+1

+1這兩種方式都沒有優勢,除了使用訪問器稍微簡單一些,並且更簡單==減少錯誤。打開ARC時,保留是語法錯誤,但並非所有人都在使用它。 –

相關問題