2014-06-24 4 views
0

내 프로젝트는 수많은 레거시 코드 (100 개 이상의 독립 메소드)로 컴파일 될 것입니다. 모든 다른 유산 방법은 내 프로젝트에서 동일한 목적을 달성하려고합니다. 단지 그렇게 많이 다릅니다. 말하자면, 이들은 모두 거의 동일한 입력과 동일한 출력을 가지지 만, 그 출력을 얻으려면 매우 복잡한 계산을 수행하며, 이러한 계산은 여러 방법간에 크게 다를 수 있습니다. 주어진 세션 동안 메서드 중 하나만 호출하면되지만 다음 세션에서는 다른 메서드를 호출해야 할 수도 있습니다. 내 프로젝트에서, 메소드 중 하나를 호출하려고 할 때 사용자는 호출 할 메소드를 결정할 수있는 충분한 정보를 입력해야합니다.런타임시 동적 메소드 호출

내가 처리 할 수있는 한 가지 방법은 거대한 if 블록을 사용하는 것입니다. 나는 몇 가지 다른 조건을 점검해야 할 것이다. 각 조건의 조합에 대해, 나는 나의 유산 방법 중 다른 하나를 부를 것이다. 이 접근법의 문제점은 가독성 측면에서 볼 때 매우 나빠질 수 있다는 것입니다. 실제 if 블록은 결국 100 초의 라인이 될 것입니다. 그 많은 다른 else-if 문에서도 성능 문제가있을 수 있다고 생각합니다.

내가 무엇을하고 싶은지는 조회 할 테이블의 이름을 저장하여 문자열로 호출하고 확인해야하는 여러 조건과 쌍을 이루는 것입니다. 우리 회사는 더 많은 룩업 테이블을 사용하고 더 큰 수의 if 블록을 사용하는쪽으로 정책을 바꾸려고합니다.

"look-up table"에서 돌아 오는 "method name"문자열을 기반으로 메소드를 호출 할 수있는 방법이 있습니까? 그렇다면 구문을 어떻게 보입니까? 아니면 내가 생각하지 못했던 이것을 처리 할 다른 (더) 방법이 있습니까? 아니면 엄청난 규모의 if 블럭이 모범 사례와 실제로 일치합니까?

+0

어째서 내가 할 때 [이 링크] (http://stackoverflow.com/questions/4446883/objective-c-calling-method-dynamically-with-a-string?rq=1)가 나타나지 않는 이유는 무엇입니까? 내 고글 거리거나 내가 이것을 타이핑하는 동안? 나는 이것이 내가 찾고있는 것이라고 생각한다. 그것을 시도해보고, 나의 질문을 삭제하고, 그것이 작동하면 upvote 연결된 질문을 삭제할 것이다. – GeneralMike

+0

performSelector가 작동 할 수도 있지만 제한 사항 중 하나는 필요에 따라 많은 매개 변수를 첨부 할 수 없다는 것입니다. – Brandon

답변

0

NSInvocation이 필요에 따라 작동 할 수 있습니다. 기본적으로 선택기에서 메소드 호출을 작성한 다음 나중에 호출 할 수 있습니다. NSSelectorFromString을 사용하여 조회 한 문자열을 기반으로 셀렉터를 만들 수 있습니다. 오래 전에 북마크 한 NSInvocation에 대한 훌륭한 자습서가 있습니다. http://a-coding.com/making-nsinvocations/.

나는 당신의 목표를 달성하기위한 다른 방법을 확신하지 못하지만, 디버깅 및 추적하기가 어렵다고 상상할 수 있습니다.

앱을 '데모'모드로 설정하기 위해 NSInvocation을 한 번 사용했습니다. NSSInvocations의 전체 배열을 만든 다음 타이머 기능이 작동 할 때마다 다음 호출을 가져 와서 호출합니다. 내 응용 프로그램이 누군가를 사용하는 것처럼 작동하도록 허용합니다. 어쨌든 행운을 빌어 요.