2015-01-21 28 views
1

生成該被打上iOS,但我敢肯定,這可能是其他解析的SDK也是有用的。正如您所知,Parse增加了在不久前爲iOS SDK創建本地PFObject子類的功能。出於多種原因,這是一個很好的補充。首先,它可以讓編譯器通過爲對象創建動態屬性,以檢查你的代碼屬性:初始化方法PFObject子類對象由解析

myObject[@"myAttribute"]轉化爲myObject.myAttribute

第二,這個問題更重要的是,定製子類可以有附加功能。例如,假設我創建了一個鬧鐘應用程序,該應用程序在分析雲中存儲Alarm對象。在我的自定義子類,我可以覆蓋+ (instancetype)object- (void)saveEventually,並且- (void)deleteEventually方法在創建,修改或刪除,以便alarm對象可以調度/更新/刪除UILocalNotification本身。

這裏的情況變得有些複雜和我的實際問題的用武之地。假設一個用戶創建一個設備上的報警器(它上傳到雲),然後會自動同步到另一臺設備。第二個設備明顯更新它在後臺的內容,其中PFQuery- (BFTask *)findObjectsInBackground然後在每個對象上調用- (BFTask *)fetchIfNecessaryInBackground以確保其所有物質都在設備上。我的問題是:當從Parse雲數據庫中找到/提取PFObject子類時,會調用哪些方法(如果有)?對於這個問題,從本地數據存儲區初始化的對象是什麼?

就像我提到的,覆蓋各種方法完全適用的創建和設備上的管理對象,但我感到困惑,怎麼一會從剛到內存從本地或一個新的對象中運行自定義代碼遠程數據存儲。任何想法或建議如何處理這將不勝感激。 Parse文檔不包含這種情況,所以它可能不是最佳實踐,但在我看來它應該是。無論如何,感謝你的時間和你的見解。

回答

0

至於NSObject大多數子類,要走的路可能是覆蓋-init方法。

但是,正如你在最後一段中提到的那樣,這種做法是無證的,你應該避免它。工作方式PFObjects可以在內存中擁有多個相同對象的實例(多個PFObjects,具有相同的objectId)。而且你不控制何時或爲什麼創建這些對象,所以依賴於初始化時執行的代碼可能是一個壞主意。如果您一直在使用核心數據,請注意Parse真的以不同的方式處理事情,所以最佳實踐是不同的。

例如,我不是說這樣的話,但如果保存之前創建了每個對象的副本?如果在使用「緩存然後網絡」策略進行查詢時創建對象兩次,該怎麼辦?即使你使它工作,你仍然會得到一些可能會破壞框架的每一個更新的東西。

我想你應該捆綁在你自己的方法初始化代碼,當你從一個查詢或從本地數據存儲,接受他們,你會叫自己的對象。重寫是面向對象編程中的一個很好的設計和實踐,但也有一些例外,我認爲這是其中之一。