2010-05-29 3 views
4

내 첫 번째 게시물은 여기 (어디서나 중요!), 다시. 코코아/Obj-C (나는 어느 쪽이도 속도를 높이 지 않으니 참아주십시오!). 나는 이미 대답을 놓치지 않았 으면 좋겠다. 나는 그것을 찾으려고 노력했다.알려진 클래스의 객체 인스턴스를 "Finding"합니까?

나는 80 년대 중반 이후로 프로그래밍을하지 않았으므로 새로운 트릭을 배울 수는 없지만 OOP에는 머리가 돌아 간다! 내 질문은 :

그것을 인스턴스화 그 어떤 다른 알 수없는 과정 주어진 인스턴스 알려진 클래스의 객체의 를 "/ 찾기/발견 식별" 에 전혀 어떤 방법이 있습니까?

예 : 이 시나리오를 수행 할 뭔가를해야만 : 그 문제에 대한

(id) anObj = [someTarget getMostRecentInstanceOf:[aKnownClass class]]; 

, "getAnyInstance"또는 "getAllInstances는"너무 트릭을 할 수 있습니다.

배경 : 상업용 응용 프로그램을위한 플러그인을 작성하려고합니다. 무거운 짐을 너무 많이 털어 놓고 있기 때문에, 앱 뒤에는 장면이 있습니다.

나는 & SDK 파일을 가지고 있는데, 어떤 클래스의 객체인지 알았고 어떤 메소드를 호출해야하는지 (인스턴스 메소드 만 가지고있다), 나는 목표물을 식별 할 수 없다.

Apple 설명서, 자습서 및 웹 (예 : 스택 오버플로)에있는 예제/샘플 코드가 많지 않아 몇 시간이나 지났습니다. 비어 있습니다. 모든 것이 알려진 대상 객체를 필요로한다고 생각합니다.

http://www.nulltime.com/svtest/index.html

어떤 도움을 또는 지침은 다음과 같습니다

내가 다이어그램 &와, 명확, 나는 웹 페이지를 넣었습니다 필요에 따라 내 문제를 표현되지 않을 수 있기 때문에 작업 샘플 페이지는 설명하기 고맙다! 감사.

답변

1

사전이 만들어 질 때 사전에 각 인스턴스를 등록하지 않으면이 작업을 수행 할 수 없습니다. 즉,이 부기 작업을 수행하는 높은 수준에서 일반적인 공장 방법을 무시하십시오. 당신이 통제 할 수없는 대의원을 사용할 때 이것은 떨어질 것입니다.

나는이 일을 전혀 할 필요가 없다는 것에 의문을 제기하지만, 실제로 필요한 작업을 수행하는 다른,보다 적절한 방법을 추천하기 위해 내가 필요로 할뿐만 아니라 당신의 문제를 알지 못합니다.

위의 결과와 마찬가지로; 나는 내가 실제로 잊어 버렸던 것이 있는지를보기 위해 런타임을 보았다. 그러나 그렇지 않다. 그래서 위의 성명서는 그 부기를해야하는 것과 관련하여 여전히 두려워합니다.

편집 : 다이어그램을 기반으로

(나는이 대답을 게시 한 후 내 사과, 그냥 링크를 발견) 반환 할 클래스를 제어하는 ​​경우 해당 클래스에 속성을 추가하는 것이 좋습니다. 즉, 설정하고 고유하게 유지할 수있는 "이름"속성을 추가하십시오. 그런 다음 각 인스턴스에 메시지를 전달하여 해당 객체가 원하는 객체인지 여부를 확인하십시오. 특별히 영리하지는 않지만 그와 같은 것이 아니라 귀하의 목적에 부합해야합니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 제가 이해한다면, 당신은 저의 최악의 두려움을 확인했을 것입니다. "클래스가 반환 제어"는 "클래스 A"를 참조하고 & "클래스 B"에 의한 경우, 내가 그들을 통제하지 않는 . 내가 갖고있는 것은 응용 프로그램 SDK에서 제공하는 인터페이스 (.h) 파일뿐입니다. 아무것도 추가 할 구현 파일이 없습니다. Sean –

3

은 내가 개체가 어떤 클래스를 알고, 내가 (그것은 단지 인스턴스 메소드가)를 호출하는 데 필요한 방법, 난 그냥 표적으로의 물체를 식별 할 수 있으며, SDK & 헤더 파일이 있습니다.

이 공개적으로 선언 된 인스턴스 메소드와 공개적으로 선언 된 클래스 인 경우 (즉, 당신은 클래스의 헤더를 가지고 그것의 인스턴스 메소드가), 아마 인스턴스를 얻을이 응용 프로그램의 API의 방법이있다 수업의 당신은 스스로를 만들거나 응용 프로그램이 하나 (또는 ​​그 이상)를 가지며 그것을 얻는 방법을 제공합니다. 문제의 클래스에 대한 헤더와 다른 헤더를 살펴보십시오.

처음에는 "방법이 있어야합니다 ..."라고 말했지만 머리글에 인스턴스 메서드가있는 다른 이유가 있기 때문에 변경했습니다. 응용 프로그램 개발자는 이러한 인스턴스 메서드를 플러그인 용으로 사용하지 않습니다 (적절하게 표시하지 않음), 또는 응용 프로그램/SDK에 헤더를 포함시키려는 의도는 아닙니다 (우연히 포함 시켰습니다). 애플리케이션 개발자에게 지침을 요청할 수 있습니다. 그것은 공개적으로 선언 된 클래스하지 않거나 해당 인스턴스 방법이 공개적으로 선언되지 않은 경우

는 다음 응용 프로그램은 클래스의 인스턴스 작업을 지원하지 않습니다. 그렇게하는 것은 계약서가 아닌 계약서에 위배됩니다.하지만 애플리케이션에 플러그인에 대한 기대 사항이 있습니다. API 계약을 위반할 경우 예기치 않은 동작이 발생할 수 있습니다 (현재 테스트 중이거나 자체 테스트가 아닌 경우).

클래스의 공개 선언은 클래스 메소드가 포함 된 경우

은 아마도 무엇 후 당신은 전혀-멋져요 클래스 자체에 그 메시지를 보낼 생각 인스턴스가 아닌.

관련 문제