2010-06-14 8 views
2

질문은 이미 물어 보았을 수도 있지만 아이폰의 프레임 워크가 Objective-C 사용에만 제한되어 있는지 또는 C/C++ 코드에서 액세스 할 수 있는지 알고 싶습니다.C/C++에서 UIKit 사용

예를 들어 C/C++ 코드의 표준 iPhone 컨트롤을 사용할 수 있습니까? C/C++ 코드에서 NSArray, NSSet과 같은 표준 클래스를 사용할 수 있습니까?

만약 그렇다면 어떻게 할 수 있습니까?

+0

가능한 [Objective-C 대신 Cocoa와 함께 C++ 사용?] (http://stackoverflow.com/questions/525609/use-c-with-cocoa-instead-of-objective-c) –

답변

4

목표 C와 C++을 혼합 할 수 있습니다. 소스 파일의 이름을 .mm으로 바꿉니다.

NSArray 및 NSSet과 같은 일부 Foundation 클래스는 CFArray 및 CFSet과 같은 CoreFoundation 객체에 대한 수신자 부담 브릿지입니다. 후자는 ObjC없이 사용할 수있는 순수한 C 라이브러리입니다.


UIKit은 순수한 Objective-C 프레임 워크입니다. Objective-C 런타임은 objc_msgSend과 같은 순수 C 함수에서 액세스 할 수 있으므로 C 및 C++에서 UIKit을 사용할 수 있습니다.

id UIView = objc_getClass("UIView"); 
SEL alloc = sel_registerName("alloc"); 
id view = objc_msgSend(UIView, alloc); 
// ... 

그러나 신뢰할 수는 없습니다.

objc_msgSend(view, sel_registerName("setAlpha:"), 0.4); 

당신이 원하는 것을하지 것입니다.

UI 파트를 분리하고 해당 파트에 대해서만 ObjC를 작성할 수 있습니다. UI와 백엔드 사이에 C 인터페이스를 작성하십시오. C++ 또는 임의의 (허용 된) 언어를 사용할 수 있습니다.

+0

실제로 Objective-C 클래스와 호환되는 방식으로 C++ 클래스를 작성하지만 키워드 메시지는 여전히 문제가됩니다. – jer

+1

왜'objc_msgSend (view, sel_registerName ("setAlpha :"), 0.4);'그가 원하는 것을하지 않습니까? – jcanizales

관련 문제