콘텐츠로 건너뛰기
Home » command patter

command patter

[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 를 호출한다?

더 보기 »[Objective-C] NSInvocation 과 Forward