【问题标题】:NSOperationQueue and MemoryNSOperationQueue 和内存
【发布时间】:2015-05-12 13:45:26
【问题描述】:

我一直在使用 NSOperationQueue,但我遇到了非常奇怪的内存问题。 我已经尝试将问题简化为最简单的问题,在这里我得到了:

在初始化中:

_queue = [[NSOperationQueue alloc] init];

稍后:

TestOperation op = [[TestOperation alloc] init];
[self.queue addOperation: op];

然后在main调用的方法中运行:

NSLog(@"I'm right here!");

如果我调用它数千次,我使用的内存只会不断增长。

我只从我的方法中删除了 NSLog(因此调用了一个空方法)我的记忆没有改变。

我在这里做错了什么??

【问题讨论】:

  • op 也是类的成员还是在函数内部?我看到您正在声明队列,就好像它在函数内部一样,但是您正在做类似 self.queue 的事情,我的意思是队列是该类的属性。
  • 是的,抱歉,已更正,我只是尝试将重要的行放在这里。速度太快了。
  • 什么叫千遍?你有没有开始你的操作队列。我闻到你一直在向一个从未开始的队列添加操作。
  • 是的,它已启动并且打印在控制台中打印。我有一个简单的 for 循环,该循环调用该方法创建操作并将其添加到队列中一千次。有关内存增长的可能解释(我目前仍在调查),请参阅下面的其他评论。

标签: ios memory-leaks nsoperationqueue


【解决方案1】:

当您向 NSOperationQueue 添加操作时,操作队列拥有该对象并负责释放它。也许您没有给 NSOperationQueue 足够的时间来释放内存并查看结果?

对于这种情况,您可以用@autorelease 块包围它,但由于操作队列负责释放对象,我不知道它是否会起作用。值得一试。

【讨论】:

  • 我只是想到了一些东西(尽管它没有解释为什么它没有以空方法改变内存)。我的队列容量随着我存储在其中的同时操作的数量而增长。因此,即使处理完所有操作,它所占用的内存也不会改变。我想我需要找到一种方法来改变它的操作 NSArray 的容量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
相关资源
最近更新 更多