Objective-C에는 네임 스페이스가 없습니다. C와 매우 흡사합니다. 모든 것이 하나의 전역 네임 스페이스 내에 있습니다. 일반적인 관행은 클래스 앞에 이니셜을 붙이는 것입니다. 예를 들어 IBM에서 작업하는 경우 접두어에 "IBM"을 붙일 수 있습니다. Microsoft에서 일하는 경우 "MS"를 사용할 수 있습니다. 등등. 때때로 이니셜은 프로젝트를 참조합니다 (예 : Adium 접두사 클래스에는 "AI"가 붙습니다 (이니셜을 가져올 수있는 회사가 없기 때문에). Apple은 NS로 클래스 접두사를 지정하며이 접두사는 Apple 전용으로 예약되어 있습니다.
여태까지는 그러나 클래스 이름 앞에 2 ~ 4자를 추가하는 것은 매우 제한적인 네임 스페이스입니다. 예를 들어 MS 또는 AI는 완전히 다른 의미를 가질 수 있으며 (예 : AI는 인공 지능 일 수 있음) 일부 다른 개발자는이를 사용하여 동일한 이름의 클래스를 만들 수 있습니다. Bang , 네임 스페이스 충돌.
자, 이것이 자신의 클래스 중 하나와 사용중인 외부 프레임 워크 중 하나와 충돌하는 경우 클래스 이름을 쉽게 변경할 수 있습니다. 그러나 소스가없고 변경할 수없는 두 가지 외부 프레임 워크를 사용한다면 어떨까요? 응용 프로그램이 둘 다 연결되며 이름 충돌이 발생합니다. 이 문제를 어떻게 해결하겠습니까? 두 클래스를 계속 사용할 수있는 방법으로 문제를 해결하는 가장 좋은 방법은 무엇입니까?
C에서는 라이브러리에 직접 연결하지 않고 이러한 문제를 해결할 수 있습니다. 대신 런타임에 dlopen ()을 사용하여 라이브러리를로드 한 다음 dlsym ()을 사용하여 찾고있는 기호를 찾아 전역 기호에 할당하십시오 ( 원하는 방식으로 이름을 지정한 다음이 전역 기호를 통해 액세스 할 수 있습니다. 예를 들어 일부 C 라이브러리에 open ()이라는 함수가 있기 때문에 충돌이 발생하면 myOpen이라는 변수를 정의하고 라이브러리의 open () 함수를 가리 키도록 할 수 있습니다. 따라서 시스템 open ()을 사용하려는 경우 open ()을 사용하고 다른 것을 사용하려면 myOpen 식별자를 통해 액세스하십시오.
Objective-C에서 비슷한 것이 가능합니까? 그렇지 않으면 네임 스페이스 충돌을 해결할 수있는 영리하고 까다로운 솔루션이 있습니까? 어떤 아이디어?
최신 정보:
명확히하기 위해 : 네임 스페이스 충돌을 미리 피하는 방법이나 더 나은 네임 스페이스를 만드는 방법을 제안하는 답변은 확실히 환영합니다. 그러나 그들은 내 문제를 해결하지 못하기 때문에 대답 으로 받아들이지 않을 것입니다. 두 개의 라이브러리가 있고 클래스 이름이 충돌합니다. 변경할 수 없습니다. 어느 쪽이든 소스가 없습니다. 충돌은 이미 존재하며 사전에 피할 수있는 방법에 대한 팁은 더 이상 도움이되지 않습니다. 이러한 프레임 워크 개발자에게 전달할 수 있으며 앞으로 더 나은 네임 스페이스를 선택하기를 희망하지만 당분간은 단일 응용 프로그램 내에서 프레임 워크를 사용할 수있는 솔루션을 찾고 있습니다. 이를 가능하게하는 솔루션이 있습니까?