如何移除所有的performSelector:withObject:afterDelay:?

16

在释放一个持有了少量performSelector:withObject:afterDelay的对象时,我遇到了EXC_BAD_ACCESS错误,其中选择器方法调用了另一个对象,并且我正在释放该对象。

在我的类的某个地方,我调用了:

[self performSelector:@selector(callObject1Function) withObject:nil afterDelay:2.0];

在我的类中我有:

- (void)callObject1Function{
    [object1 function1]  // Here I am getting "EXC_BAD_ACCESS"
}

- (void)dealloc {
    [object1 release];
    [super dealloc];
}

我就是不理解,我以为当你dealloc对象时,与对象相关的所有内容都应该被删除或取消,甚至包括带延迟的performSelector

2个回答

28

使用NSObject的:

-cancelPreviousPerformRequestsWithTarget:selector:object: 
取消任何待处理的执行选择器。

18
如果您想消除所有针对特定目标的选择器和对象执行请求,而不指定选择器和对象,请使用NSObject的+cancelPreviousPerformRequestsWithTarget: 方法。 - Bogatyr
你应该使用相同的目标、相同的选择器和相同的对象来取消之前的perform请求。如果对象不同,那么你没有取消任何东西。这很重要。 - Leonardo

24

我在所有的应用程序中使用了以下代码,并且它是有效的。

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(MethodName) object:nil];

谢谢,Hemang。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接