0

我知道调用一个方法就好像它是无效的一样,即使它有一个返回值(如 printf),但这又如何呢?

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

我可以让它漂浮在那里而不使用它返回的对象吗?这就像调用 [NSObject alloc] 而不将其分配给指针或任何东西。那是内存泄漏吗?原因是我不想将它分配给一个变量(计时器),因为如果我释放(或自动释放)它会在它触发之前被删除。而且我不想使用 ivar。所以我该怎么做?

编辑:我发现了 [self performSelector:@selector(myMethod) withObject:nil afterDelay:0.3]; 这比使用计时器要好得多。

4

1 回答 1

2

此调用创建的 NSTimer 归当前 NSRunLoop 对象所有,因此它不会被任何自动释放池耗尽自动释放。而且手动释放是错误的。NSTimer 应该通过发送无效消息来删除:

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

所以基本上你应该有一个变量并使用invalidate而不是release

于 2009-08-14T22:45:31.797 回答