我有一些可以调用performSelector的类:afterDelay。
在某些情况下,我想取消其中任何一项。
然而,所有的cancelPerformSelector类型方法都采用了目标,因此似乎没有办法一次性取消所有内容(因为有不同的目标)?
除非指定nil作为目标将取消所有内容?
或者可以将目标指定为[NSRunLoop mainRunLoop]以取消所有内容,例如
[NSObject cancelPreviousPerformRequestsWithTarget:[NSRunLoop mainRunLoop]]
答案 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
希望这有帮助。