被对象调用performSelector:withObject:afterDelay由NSRunLo

2019-09-17 20:17发布

我有一个执行“刷新”每X秒的某个对象。 (以下简称“更新”)我做这种重复性更新的方法是调用performSelector:withObject:afterDelay和我的选择,我重新安排是必要的。

当然,我有一个方法调用停止这些invokations cancelPreviousPerformRequests

问题是,这种“更新”是永远不会被释放。 仅存在一个保留更新程序(AFAIK),并且保持对象被释放的其他对象,并调用[self setUpdater:nil];

我怀疑这是有事情做与performSelector:withObject:afterDelay方法,但我无法找到的文档中这个问题的任何引用。

任何人都可以确认或排除呢?

谢谢!

附录这是调度方法:

-(void) scheduleProgressUpdate
{
    [self stopProgressUpdates]; // To prevent double scheduling
    [self performSelector:@selector(updateProgress) 
               withObject:nil 
               afterDelay:1.0];
}

-(void) updateProgress
{
    // Perform update..
    [self scheduleProgressUpdate];
}

-(void) stopProgressUpdates
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self 
                                             selector:@selector(updateProgress) 
                                               object:nil];
}

Answer 1:

据我所知performSelector方法保留其接收器和参数。



文章来源: Is object that calls performSelector:withObject:afterDelay get retained by the NSRunLoop?