继this question后,我在BEncoding.m修复了一堆内存泄漏(最初来自here)
我已经修复了所有明显的内存泄漏,但是Clang发现了四个“返回对象泄漏”错误,我不知道如何排序:
完整的消息/适当的代码位是:
NSMutableData *data = [[NSMutableData alloc] init];
[1] Method返回一个具有+1保留计数(拥有引用)的Objective-C对象
[...] snprintf(buffer, 32, "%lu:", [object length]); [data appendBytes:buffer length:strlen(buffer)]; [data appendData:object]; return data;
[3]对象作为拥有引用返回给调用者(单个保留计数转移给调用者)
答案 0 :(得分:7)
你想要:
返回[data autorelease];
因为你要把它交给来电者。
答案 1 :(得分:3)
好的,所以要扩展上面的答案(感谢我把我设置在正确的轨道上)......
return [data autorelease]
您已经分配了一些对象“数据”,并且即将将此对象返回给调用者。这在Obj-C中的工作方式是在调用堆栈的某个级别,有一个NSAutoreleasePool。当您向数据发送“autorelease”消息时,它会将自身添加到该自动释放池中。这允许调用者简单地(即,在本地堆栈帧的持续时间内)使用“数据”对象而无需显式调用“释放”,并且最终,当自动释放池“弹出”时,数据将被释放(除非有人称之为“保留”)。那很聪明。
甜。我想我刚刚在Obj-C内存管理方面赢得了绿带。
答案 2 :(得分:1)
听起来这些物品在返回之前没有正确释放,这违反了Objective-C memory management conventions。