是调用performSelector的对象:withObject:afterDelay是否被NSRunLoop保留?

时间:2012-06-07 08:15:35

标签: objective-c ios cocoa-touch nsobject nsrunloop

我有一个对象每隔X秒执行一次“刷新”。 (“更新者”) 我正在进行这种重复更新的方法是调用performSelector:withObject:afterDelay并在我的选择器中根据需要重新安排。

当然,我有一种方法可以通过调用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];
}

1 个答案:

答案 0 :(得分:2)

据我所知,performSelector方法保留了它的接收者和参数。