使用Profiler在iOS中发生内存泄漏

时间:2013-11-27 08:17:17

标签: ios memory-leaks

查看内存分析器,它显示内存使用量增加,缓慢但稳定。全部在NSStream Delegate中的以下两行:

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {

    case NSStreamEventHasBytesAvailable:
    {
        if (theStream == inputStream) {
            int bytesRead = 0;
            static uint8_t buffer[1024];
            bytesRead = [inputStream read:buffer maxLength:sizeof(buffer)]; -- this line causing the memory to grow
            //[inBuffer appendBytes:buffer length:bytesRead];
            //Do something
        }
        break;
    }

  }

我认为缓冲区每次到达时都会被填充并且从本地刷新后会被刷新。那有什么问题?

2 个答案:

答案 0 :(得分:0)

代码看起来很好。

如果您正在查看分配摘要,“总字节数”将不断增加,因为它还包括瞬态字节(这是临时的)。确保您正在观察“Live Bytes”/“#Living”。 此外,代码看起来非常有效,它不会在每个周期分配自己的内存。 'static'变量只是在已经分配的空间上处理内容。因此,即使显示某些分配,也可能是因为“读取”方法。

PS:您可能还想检查NSStream对象是否实际上是自定义派生类型,以及它是否具有“read”方法的一些自定义实现。

答案 1 :(得分:0)

奇怪的是,我尝试了所有的探查器工具,它没有帮助,内存仍在稳定增长,我将其剥离到上面显示的非常简单的代码,内存仍在增长。出于沮丧,我最终将我的代码复制到一个新的空白项目中,运行它并且内存看起来很稳定。我不知道这种奇怪行为的原因是什么。请注意,此应用程序可以高速处理IP / TCP数据。