在NSTimer重复调用的方法中使用NSInvocationOperation时,我遇到了内存问题(应用程序将运行几次迭代,然后收到内存不足警告,最后被终止)。
该方法将每1/4秒调用一次,我已经将问题的根源缩小到以下测试行:
-(void)methodCalledByTimer {
NSInvocationOperation *o = [NSInvocationOperation alloc];
[o release];
}取消对这两行代码的注释(以生成一个空方法)可以防止出现内存问题。一旦它们进入,内存使用量将快速增加,最终应用程序将被终止。
有人能解释一下我做错了什么吗?为了确保NSInvocationOperation对象被正确释放,我还需要做些什么吗?
非常感谢你的帮助。
亲切的问候,迈克尔。
发布于 2009-12-19 01:53:46
一种可能的解决方案可能是只将NSInvocationOperation存储在其他地方,而不是在每次调用methodCalledByTimer时创建并释放一个。
我在使用NSCalendar时遇到了一些问题,我会创建并发布数千次用于某些日期工作的日历,但后来我只创建了一个附加到appDelegate上的日历,并每次都访问它。修复了大量的内存泄漏,这可能比每次创建一个新对象要好。
发布于 2010-01-05 16:21:22
我认为问题出在你在不初始化的情况下如何分配。错误代码行的第一行应该是:
NSInvocationOperation *o = [[NSInvocationOperation alloc] initWithTarget:yourTarget selector:@selector(yourSelector) object:yourObjectOrNil];关于mjdth的回答,我认为您不应该尝试重用调用操作。来自NSOperation (NSInvoationOperation的超类)的文档:
操作对象是单次操作对象,也就是说,它只执行一次任务,不能用于再次执行。
此外,任何Objective-C对象都不应该被初始化两次。
https://stackoverflow.com/questions/1929732
复制相似问题