是否可以在多个对象上取消PerformSelector?

时间:2012-06-05 18:23:35

标签: objective-c ios cocoa-touch

我有一些可以调用performSelector的类:afterDelay。

在某些情况下,我想取消其中任何一项。

然而,所有的cancelPerformSelector类型方法都采用了目标,因此似乎没有办法一次性取消所有内容(因为有不同的目标)?

除非指定nil作为目标将取消所有内容?

或者可以将目标指定为[NSRunLoop mainRunLoop]以取消所有内容,例如

[NSObject cancelPreviousPerformRequestsWithTarget:[NSRunLoop mainRunLoop]]

1 个答案:

答案 0 :(得分:1)

假设您的视图控制器声明类似于以下内容:

@interface CarViewController : UIViewController

@property (strong) id myObject;

@end

另外假设您已在实施中的某个位置注册了执行选择器的请求,如下面的代码所示:

myObject

为了便于论证,您希望视图控制器在从内存中卸载之前取消所有先前的执行请求,您的[self.myObject performSelector:@selector(someSelector) withObject:nil afterDelay:0.0]; 消息将如下所示:

-viewWillUnload

这将取消为该特定实例注册的所有执行请求。正如Joe指出的那样,如果你没有自己对对象进行强有力的引用,而是将这些对象存储在- (void)viewWillUnload { [NSObject cancelPreviousPerformRequestsWithTarget:self.myObject] } 中,则需要迭代该数组并为每个元素调用NSArray。数组,甚至是+cancelPreviousPerformRequestsWithTarget:的{​​{1}}:

NSArray

希望这有帮助。