首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone上的NSInvocationOperation内存问题

iPhone上的NSInvocationOperation内存问题
EN

Stack Overflow用户
提问于 2009-12-19 01:49:16
回答 2查看 544关注 0票数 0

在NSTimer重复调用的方法中使用NSInvocationOperation时,我遇到了内存问题(应用程序将运行几次迭代,然后收到内存不足警告,最后被终止)。

该方法将每1/4秒调用一次,我已经将问题的根源缩小到以下测试行:

代码语言:javascript
复制
-(void)methodCalledByTimer {

        NSInvocationOperation *o = [NSInvocationOperation alloc];
        [o release];

}

取消对这两行代码的注释(以生成一个空方法)可以防止出现内存问题。一旦它们进入,内存使用量将快速增加,最终应用程序将被终止。

有人能解释一下我做错了什么吗?为了确保NSInvocationOperation对象被正确释放,我还需要做些什么吗?

非常感谢你的帮助。

亲切的问候,迈克尔。

EN

回答 2

Stack Overflow用户

发布于 2009-12-19 01:53:46

一种可能的解决方案可能是只将NSInvocationOperation存储在其他地方,而不是在每次调用methodCalledByTimer时创建并释放一个。

我在使用NSCalendar时遇到了一些问题,我会创建并发布数千次用于某些日期工作的日历,但后来我只创建了一个附加到appDelegate上的日历,并每次都访问它。修复了大量的内存泄漏,这可能比每次创建一个新对象要好。

票数 0
EN

Stack Overflow用户

发布于 2010-01-05 16:21:22

我认为问题出在你在不初始化的情况下如何分配。错误代码行的第一行应该是:

代码语言:javascript
复制
NSInvocationOperation *o = [[NSInvocationOperation alloc] initWithTarget:yourTarget selector:@selector(yourSelector) object:yourObjectOrNil];

关于mjdth的回答,我认为您不应该尝试重用调用操作。来自NSOperation (NSInvoationOperation的超类)的文档:

操作对象是单次操作对象,也就是说,它只执行一次任务,不能用于再次执行。

此外,任何Objective-C对象都不应该被初始化两次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1929732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档