Parse生成的PFObject子类对象的初始化方法

时间:2015-01-21 02:09:19

标签: ios objective-c parse-platform subclass pfobject

这是用iOS标记的,但我确信它对其他Parse SDK也很有用。您可能知道,Parse在不久前添加了为PFObject SDK创建本机iOS子类的功能。出于多种原因,这是一个很好的补充。首先,它允许编译器通过为对象属性创建动态属性来检查代码:

myObject[@"myAttribute"]已转换为myObject.myAttribute

其次,对这个问题更重要的是,自定义子类可以添加功能。例如,假设我创建了一个警报应用程序,用于在Parse云上存储Alarm个对象。在我的自定义子类中,我可以覆盖+ (instancetype)object- (void)saveEventually- (void)deleteEventually方法,以便alarm对象可以安排/更新/删除UILocalNotification本身在创建,修改或删除时。

在这里,事情变得复杂,我的实际问题就出现了。假设用户在一台设备上创建一个警报(将其上传到云端),然后自动将其同步到另一台设备。第二个设备显然会使用PFQuery - (BFTask *)findObjectsInBackground在后​​台更新其内容,然后在每个对象上调用- (BFTask *)fetchIfNecessaryInBackground以确保其所有内容都已开启装置。我的问题是:当从Parse云数据库中找到/获取PFObject子类时,会调用哪些方法(如果有的话)?就此而言,从本地数据存储区初始化的对象呢?

正如我所提到的,覆盖各种方法对于在设备上创建和管理的对象非常有效,但是我很困惑于如何从刚从本地或远程到达内存的新对象中运行自定义代码数据存储。任何关于如何处理这个的想法或建议将非常感激。 Parse文档不包括这样的情况,因此它甚至可能不是最佳实践,但在我看来它应该是。无论如何,感谢您的时间和见解。

1 个答案:

答案 0 :(得分:0)

对于NSObject的大多数子类,要采用的方法可能是覆盖-init方法。

但是,正如您在上一段中提到的那样,这种做法没有记录,您应该避免使用它。 PFObjects的工作方式使得在内存中拥有同一对象的多个实例成为可能(多个PFObjects具有相同的objectId)。并且您无法控制何时或为何创建这些对象,因此依赖于初始化时执行的代码可能是个坏主意。如果你一直在使用核心数据,请注意Parse真的以不同的方式处理事情,所以最佳实践是不同的。

例如,我并不是说这种情况,但如果在保存之前创建了每个对象的副本怎么办?如果在使用'缓存进行查询时对象被创建两次,那么网络'政策?即使你使它工作,你仍然会得到一些可能会随着框架的每次更新而中断的东西。

我认为您应该将初始化代码捆绑在您自己的方法中,当您从查询或本地数据存储区接收对象时,您可以在对象上调用它们。覆盖是面向对象编程的一个很好的设计和实践,但有一些例外,我认为这是其中之一。