2012-07-26 54 views
0

我已經看到了一些使用NSCoder歸檔應用程序中的事情爲什麼存檔?它如何提高性能?

@interface MyApplicationData : NSObject <NSCoding, NSCopying> { 
    NSMutableArray* items; 
    NSMutableArray* categories; 
} 

請參閱該線程的例子。 How to use NSCoder

這爲什麼會提高應用程序的性能?是不是在你的應用程序中做更多的事情?任何人都可以告訴我爲什麼以及何時使用存檔?

編輯: 從書中引用,iOS 5編程推動極限 - 在存儲緩存的方法下:「緩存或保存數據可以通過將其存儲爲數據模型的存檔(使用NSKeyedArchiver)或使用像原始SQLite這樣的更高級別的數據庫或使用像Core Data這樣的對象序列化框架...「」.... NSKeyedArchiver通過實現NSCoding協議來實現。「

我認爲NSCoding或NSCoder可以用於緩存,它會提高性能。那麼使用它進行緩存不是好習慣嗎?

在此先感謝。

+3

使用'NSCoding'會以某種方式「提高性能」的概念從哪裏來? – dasblinkenlight 2012-07-26 03:58:52

+0

,緩存或保存數據可以通過將數據存儲爲數據模型的存檔(使用NSKeyedArchiver)來完成 – tipsywacky 2012-07-26 08:35:12

回答

1

這爲什麼會提高應用程序的性能?

好吧,你需要一些上下文 - 序列化可能會或可能不會「提高性能」。它可以提高性能而不是替代序列化表示。這可能會有所作爲,或者它可能並不重要。

是不是在你的應用程序中做更多的事情?

好,如果你有XML/plist中表示,而不是一個序列化對象的複雜結構,則沒有 - 它知道如何編碼對象/解碼本身可能是遠比XML更好的性能或json或其他一些中間表示(出於多種原因)。它也可以更容易管理,並且更容易表示複雜的結構(與中間序列化表示相比)。

任何人都可以告訴我爲什麼以及何時使用存檔?

通常當您想要將對象或對象圖的狀態保存到磁盤或傳輸到另一臺計算機時。

想象您有文檔數據,並且您想要在文檔重新打開時恢復該文檔 - 您的程序必須創建一個表示,以便以後正確重建對象或對象圖的狀態。

2

NSCoding與性能無關,它是一種序列化對象或對象圖的技術,因此您可以將其保存到永久存儲器或通過網絡發送。

+0

那麼這是一個安全功能嗎? – tipsywacky 2012-07-26 04:46:21

+1

「NSCoding」中的「編碼」是指「編碼」,與「加密」不同。它與安全無關。 – 2012-07-26 05:58:26

1

WhyA歸檔:

我正在開發一個需要記住用戶的累積操作的項目。這些行爲包括在屏幕上移動一些自定義對象。自定義對象的屬性包括當前位置,顏色,鄰居等。所以這些對象被存儲在一個數組中。所以NSCoding被用來序列化和存檔數組。下一次我需要回顧用戶的最後一個狀態時,我只是從存檔文件中讀取數據。如果沒有這種能力,我想我需要創建一些帶有表和字段的數據庫來單獨存儲這些屬性數據,並在需要時按照我的示例重新創建用戶的當前狀態。

+0

因此,在歸檔屬性後,即使您退出/終止程序,您仍然能夠記住用戶的最後狀態?如果我猜對了,NSCoder是一個很好的選擇,當涉及少量數據時,否則您可以使用Core Data。說到保存文件,你也會使用NSCoder,對吧? – tipsywacky 2012-07-26 05:17:22

+1

對第一個是的。不是第二個。你可能會誤解我的答案。這裏直接引用了Apple的文檔:「這種功能爲存檔(在磁盤上存儲對象和其他結構的地方)和分發(將對象複製到不同地址空間的地方)提供了基礎。」這裏是鏈接:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSCoding_Protocol/Reference/Reference.html – user523234 2012-07-26 22:24:15