首页 文章

objective c - 不使用返回值调用对象返回方法

提问于
浏览
0

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

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

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

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

1 回答

  • 2

    此调用创建的NSTimer由当前的NSRunLoop对象拥有,因此不会被任何自动释放池权限自动释放 . 手动释放它是错误的 . 应该通过发送它来删除NSTimer invalidate 消息:

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

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

相关问题