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

问题描述 投票:0回答:2

预先感谢。每当我调用[PFObject saveAll]或[PFObject saveAllInBackground]时,分配给该进程的内存在任务完成后都无法取消分配。因此,如果要反复调用此方法,则应用程序会因缺少可用内存而崩溃。我正在使用iOS 8.1.3,使用Xcode 6.2和ARC的iPhone 5上对此进行测试。我也使用最新的iOS Parse SDK,尽管旧版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

ios objective-c parse-platform pfobject
2个回答
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];

0
投票

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

我同意,大多数时候似乎都有某种残留物。

(来源:derrrick.com

© www.soinside.com 2019 - 2024. All rights reserved.