[Objective-C] NSInvocation 과 Forward
코코아 앱의 Undo/Redo 기능을 구현하는 부분을 보면, NSUndoManager
의 -prepareWithInvocationTarget:
메소드를 사용해서 Undo 동작시에 호출될 메소드를 기록해두는 코드가 있다. 그런데 이 메소드의 원형을 보면 좀 이상한 부분이 있다. 실제로 Undo를 지원하는 기능을 구현하고 있는 간단한 코드를 보자.
-(void) getHigher {
// undo 관리자에 실행취소를 위한 동작을 등록
[[undoManager prepareWithInvocationTarget:self] getLower];
self.height -= 1.0;
}
-(void) getLower {
[[undoManager prepareWithInvocationTarget:self] getHigher];
self.height += 1.0;
}
-prepareWithIvocationTarget:
메소드는 자기자신, 즉 NSUndoManager
의 인스턴스를 리턴한다. 그런데 이 되돌리기 관리자에게 getLower
를 호출한다?