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

Objective c 目标c-不使用返回值调用对象返回方法,objective-c,methods,return-value,call,nstimer,Objective C,Methods,Return Value,Call,Nstimer,我知道,即使有一个返回值(比如printf),调用一个方法就好像它是空的一样是很好的,但是这个呢 [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(method) userInfo:nil repeats:NO]; 我能让它在不使用它返回的对象的情况下漂浮在那里吗?这就像调用[NSObject alloc],而不将其分配给指针或任何东西。那是内存泄漏吗?原因是我不想将其分配给变量(计时器),因为

我知道,即使有一个返回值(比如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];这比使用计时器要好得多。

n此调用创建的计时器归当前nsrunlop对象所有,因此不会由任何自动释放池漏自动释放。手动释放它是错误的。应通过发送NSTimer无效消息来删除NSTimer:

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


因此,基本上您应该为它设置一个变量,并使用invalidate而不是release

有什么方法可以让它在触发时失效吗?它不会重复。。除了内存泄漏外,它现在工作正常。。“泄漏”并不表示存在泄漏,而且计时器对象从未分配给指针,也从未被释放或失效。我弄明白了,我不知道计时器将自身作为参数传递。所以你说我应该使计时器失效,而不是释放它?你一定是对的,因为我在失效后尝试释放,它崩溃了。。。谢谢将计时器添加到运行循环时,运行循环将保留该计时器。当您使计时器无效时,运行循环将释放它。因此,除非你自己保留它,否则你不应该自己释放它。非重复计时器自动使其自身失效:“重复如果是,计时器将重复重新调度自身,直到失效。如果不是,计时器将在触发后失效。”