次のように宣言されたViewControllerがあると仮定します。
@interface CarViewController : UIViewController
@property (strong) id myObject;
@end
myObject
また、以下のコードのように、実装のどこかにあるインスタンスに実行セレクターのリクエストを登録したと仮定します。
[self.myObject performSelector:@selector(someSelector) withObject:nil afterDelay:0.0];
議論のために、メモリからアンロードされる前に、View Controllerが以前のすべての実行要求をキャンセルするようにすると、-viewWillUnload
メッセージは次のようになります。
- (void)viewWillUnload {
[NSObject cancelPreviousPerformRequestsWithTarget:self.myObject]
}
これにより、その特定のインスタンスに登録されているすべての実行リクエストがキャンセルされます。Joeが指摘したように、自分でオブジェクトへの強い参照を保持しておらず、それらのオブジェクトをに格納している場合は、NSArray
その配列を繰り返し、配列の各要素を呼び出す必要があり+cancelPreviousPerformRequestsWithTarget:
ます。NSArray
-enumerateObjectsUsingBlock:
- (void)viewWillUnload {
[myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[NSObject cancelPreviousPerformRequestsWithTarget:obj];
}];
}
お役に立てれば。