目标c - 不使用返回值的调用对象返回方法

问题描述:

我知道调用方法就好像它是无效的,尽管它有一个返回值(如printf),但是这又如何呢?目标c - 不使用返回值的调用对象返回方法

[NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(method) userInfo:nil repeats:NO]; 

我可以在没有使用它返回的对象的情况下浮动吗?这就像调用[NSObject alloc]而不将它分配给指针或任何东西。这是内存泄漏吗?原因是我不想把它分配给一个变量(计时器),因为如果我释放(或autoreleaase)它会在它被触发之前被删除。我不想用伊娃。所以我该怎么做?我发现了[self performSelector:@selector(myMethod)withObject:nil afterDelay:0.3];这比使用计时器好得多。

由此调用创建的NSTimer由当前的NSRunLoop对象拥有,所以它不会被任何autorelease池漏洞自动释放。手动释放它是错误的。应的NSTimer通过发送它无效消息被删除:

要请求移除从NSRunLoop对象的计时器的,从在其上安装了计时器同一线程发送定时器的无效消息。此消息立即禁用计时器,因此它不再影响NSRunLoop对象。运行循环会在无效方法返回之前或之后的某个时间点删除并释放计时器。

所以基本上你应该有一个变量,并使用无效的代替发布

+0

是有办法只是让火灾时就无效?它不会重复..现在完美工作,除非有内存泄漏。泄漏并没有说有泄漏,并且定时器对象从未分配给指针或释放或无效。 – mk12 2009-08-14 22:55:27

+0

我明白了,我不知道计时器是否会作为一个参数传递。所以你说我应该使计时器无效,而不是释放它? – mk12 2009-08-14 22:58:45

+0

你必须是对的,因为我试图释放无效后,它崩溃了......谢谢! – mk12 2009-08-14 23:02:26