Parse.com iOS [PFObject saveAll] / [PFObject saveAllInBackground]内存分配问题

时间:2015-02-26 23:02:02

标签: ios objective-c parse-platform pfobject

提前谢谢。每当我调用[PFObject saveAll]或[PFObject saveAllInBackground]时,分配给此进程的内存在完成任务后无法解除分配。因此,如果要重复调用此方法,应用程序将因缺少可用内存而崩溃。我正在使用iOS 8.1.3和使用Xcode 6.2以及ARC的iPhone 5上进行测试。我也在使用最新的Parse SDK for iOS,虽然这个问题在旧的SDK中仍然存在。

修改

几周前我向Parse提交了一份错误报告。他们已经指派人员进行调查:https://developers.facebook.com/bugs/349439421926879/

错误的源代码:https://github.com/EpsApps/Parse-PFObject-saveAll-Memory-Bug

证据存在错误:https://fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpa1/t39.2087-6/10935993_1605305476371209_1781513233_n.png

2 个答案:

答案 0 :(得分:0)

虽然每次运行对我来说都不同,但有时内存占用确实会完全消失。看看下面的图表。

大部分时间似乎都存在某种残余,我同意。

http://derrrick.com/stackoverflow/parse_memory.png

答案 1 :(得分:0)

我已经找到了解决这个问题的方法。将对象添加为指针时,请对此对象执行简单查询,而不是重复使用通过更复杂查询提取的同一对象。

例如,当包含“bigObject”作为大保存的指针时,这将导致大量内存泄漏:

PFQuery* query = [PFQuery queryWithClassName:@"Object"];
[query whereKey:@"objectId" equalTo:object.objectId];

// Don't include an array of pointers like this
[query includeKey:@"objectArray1"];
[query includeKey:@"objectArray2"];

PFObject* bigObject = [query getFirstObject];

但这不会:

PFQuery* query = [PFQuery queryWithClassName:@"Object"];
[query whereKey:@"objectId" equalTo:object.objectId];

PFObject* smallObject = [query getFirstObject];