로 [NSRunLoop mainRunLoop은] 모든 것을 취소 할 수로 지정 될 수있다 : 당신을 가정 또한
@interface CarViewController : UIViewController
@property (strong) id myObject;
@end
' 아래 코드와 같이 실행 어딘가에 myObject
인스턴스가있는 실행 선택기에 대한 요청을 등록했습니다.
[self.myObject performSelector:@selector(someSelector) withObject:nil afterDelay:0.0];
인수를 위해서
, 당신은 당신의 뷰 컨트롤러 취소하려는 이전의 모든 메모리에서 언로드되기 전에, 당신의 -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];
}];
}
희망이 있습니다.
취소 할 수있는 모든 대상의 배열을 유지 한 다음 요청을 취소하기 위해 모든 대상을 반복해야합니다. – Joe
위의 코드가 작동하지 않는 이유는 무엇입니까? 이론 상으로는 틀림 없어? – Gruntcakes
'nil' 또는'nil'을 넘는 곳에서는 어디에도 보이지 않습니다. (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html) NSRunLoop은 모든 이전 요청을 취소 할 것이므로 이론적으로 작동 할 것이라고 믿을만한 이유가 없습니다. – Joe