2015-01-21 59 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真的以不同的方式处理事情,所以最佳实践是不同的。

例如,我不是说这样的话,但如果保存之前创建了每个对象的副本?如果在使用“缓存然后网络”策略进行查询时创建对象两次,该怎么办?即使你使它工作,你仍然会得到一些可能会破坏框架的每一个更新的东西。

我想你应该捆绑在你自己的方法初始化代码,当你从一个查询或从本地数据存储,接受他们,你会叫自己的对象。重写是面向对象编程中的一个很好的设计和实践,但也有一些例外,我认为这是其中之一。