2

除了这个问题,我在BEncoding.m中修复了一堆内存泄漏(最初来自这里

我已经修复了所有明显的内存泄漏,但 Clang 发现了四个“返回对象泄漏”错误,我不确定如何排序:

完整的消息/适当的代码位是:

NSMutableData *data = [[NSMutableData alloc] init];

[1] 方法返回一个具有 +1 保留计数的 Objective-C 对象(拥有引用)

[...]
snprintf(buffer, 32, "%lu:", [object length]);
[data appendBytes:buffer length:strlen(buffer)];
[data appendData:object];
return data;

[3] 作为拥有引用返回给调用者的对象(单个保留计数转移给调用者)

4

3 回答 3

7

你要:

返回[数据自动释放];

因为你把它交给来电者。

于 2009-04-28T17:19:18.673 回答
3

好的,所以要扩展上面的答案(感谢您让我走上正确的轨道)...

return [data autorelease]

您已经分配了一些对象“数据”,并且即将将该对象返回给调用者。这在 Obj-C 中的工作方式是在调用堆栈的某个级别上,有一个 NSAutoreleasePool。当您向数据发送“自动释放”消息时,它会将自身添加到该自动释放池中。这允许调用者短暂地使用“数据”对象(即,在本地堆栈帧的持续时间内)而无需显式调用“释放”,最终,当自动释放池“弹出”时,数据将被释放(除非有人称之为“保留”)。这是比较聪明的。

甜的。我想我刚刚获得了 Obj-C 内存管理的绿带。

于 2012-06-24T04:24:25.123 回答
1

听起来对象在返回之前没有被正确地自动释放,这违反了Objective-C 内存管理约定

于 2009-04-28T17:14:09.497 回答