如果我在一个被频繁调用的方法中分配和初始化一个对象,并且如果我不立即释放它,该对象是否会成为内存的噩梦?或者如果对象已经在内存中,则会忽略alloc和init吗?
对我来说这有点难以解释,对不起!
感谢。
答案 0 :(得分:1)
如果没有垃圾回收,如果有问题的对象永远不会被自动释放,它会消失你释放它的实例。即使对象是自动释放的,您也可以创建自己的自动释放池并用它包装循环。
在垃圾收集中,预测起来有点困难,但垃圾收集器应该能够处理所有彼此分配的对象。
答案 1 :(得分:0)
不知道你在做什么,很难说,但听起来你在做:
for (...)
[[Foo alloc] init];
在这种情况下你会泄漏,就像你做的那样
for (...)
malloc(...)
或
for (...)
new ...;
如果您处于GC环境中,这不是问题(在Obj-C 2中,启用GC保留/释放根本没有任何影响)。如果您没有使用GC,那么您将泄漏所分配的每个对象。
或者,如果您正在做类似
的事情for (...)
[[[Foo alloc] init] autorelease]
您不会无限期地泄露,但在返回到事件循环的顶部(即您的事件处理程序完成)之前,不会收集任何实例化的对象。在这种情况下,您最终可以同时使用大量内存,而不会长期泄漏。
答案 2 :(得分:0)
您是否描述过您的代码?如果是这样,你知道这是否是一个热点。如果没有,你在黑暗中工作。
你在评论中提到“我每次计时器触发时都会调用此方法,这是每秒几次”,在这种情况下,它完全无关紧要,每秒几次为对象分配内存的成本将完全忽略不计。