0

提前致谢。每当我调用 [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

4

2 回答 2

0

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

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


(来源:derrrick.com

于 2015-02-27T00:25:43.337 回答
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];
于 2015-03-13T02:21:03.380 回答