2012-02-12 128 views
0

在我的應用程序,我與SimpleKML框架緩存自定義類

https://github.com/mapbox/Simple-KML

我有一些大的文件,大約需要5秒來處理這個思想庫的工作。我正在考慮緩存對象的東西像NSData。

我從蘋果閱讀本教程:

https://developer.apple.com/library/mac/#documentation/cocoa/conceptual/Archiving/Articles/archives.html

但我真的不知道用nscoder的是做到這一點的最好辦法。有人能指引我朝着正確的方向嗎?

+0

考慮使用NSCache和NSPurgeableData [如本文所述](https://developer.apple.com/library/mac/technotes/CachingPurgeableMemory/CachingPurgeableMemory.pdf)。 – Till 2012-02-12 14:05:28

+0

好吧,我實際上正在尋找一些可以保存在某個地方的文件或文件。它看起來很喜歡nscache無法保存,或者它呢? – Melvin 2012-02-12 14:21:31

回答

1

您想使用NSKeyedArchiverNSKeyedUnarchiver

如果你保存對象(以及它作爲屬性的對象及其屬性等)實現NSCoding協議那麼它的,因爲

NSData *savedData = [NSKeyedArchiver archivedDataWithRootObject:someObject]; 
[savedData writeToFile:pathToSaveFile atomically:YES]; 

爲簡單對象歸檔到NSData然後將其保存到磁盤,然後將其保存到磁盤,然後再將其保存到磁盤,然後再將其保存到磁盤,然後再將其保存到磁盤,然後再將其保存到磁盤,然後再將其保存到磁盤,然後再將其保存到磁盤,然後再將其保存到磁盤,然後再將其保存到磁盤中。

如果不是,則需要覆蓋initWithCoder:encodeWithCoder:以查找有問題的對象,以使其正確序列化。

+0

我試過了,並保存該對象的作品。但是,它看起來像沒有保存一切。 Nsdata對象的長度是299,非常小。而我不能訪問unarchived對象的方法或屬性。它沒有null cuz當我登錄它我看到: Melvin 2012-02-12 16:01:14

+0

我讀了這個,我看起來像即時通訊做的一切正確。 https://developer.apple.com/library/mac/#documentation/cocoa/conceptual/Archiving/Articles/archives.html#//apple_ref/doc/uid/20000946-BAJDBJAI – Melvin 2012-02-12 16:04:01

+0

SimpleKML對象不能實現'NSCoding '協議正確。查看我的更新答案,瞭解需要完成的工作。可能值得讓項目做出修改,然後發送拉請求。 – yuji 2012-02-12 16:44:26