查看内存分析器,它显示内存使用量增加,缓慢但稳定。全部在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;
}
}
我认为缓冲区每次到达时都会被填充并且从本地刷新后会被刷新。那有什么问题?
答案 0 :(得分:0)
代码看起来很好。
如果您正在查看分配摘要,“总字节数”将不断增加,因为它还包括瞬态字节(这是临时的)。确保您正在观察“Live Bytes”/“#Living”。 此外,代码看起来非常有效,它不会在每个周期分配自己的内存。 'static'变量只是在已经分配的空间上处理内容。因此,即使显示某些分配,也可能是因为“读取”方法。
PS:您可能还想检查NSStream对象是否实际上是自定义派生类型,以及它是否具有“read”方法的一些自定义实现。
答案 1 :(得分:0)
奇怪的是,我尝试了所有的探查器工具,它没有帮助,内存仍在稳定增长,我将其剥离到上面显示的非常简单的代码,内存仍在增长。出于沮丧,我最终将我的代码复制到一个新的空白项目中,运行它并且内存看起来很稳定。我不知道这种奇怪行为的原因是什么。请注意,此应用程序可以高速处理IP / TCP数据。