2011-12-30 3 views
0

나는 객관적인 c 프로그래머이고 내가 얼마나 낮은 곳으로 가야하는지 궁금해. (현명한 방법).더 높거나 낮은 레벨?

예를 들어 NSURL이 있고 CFURL이 더 낮습니다. 저수준 또는 고수준을 사용하면 더 많은 기능을 추가 할 것인지 또는 빠를 것인지 확실하지 않습니다.

+2

대답 중 하나가 "낮은"경우 논리적 인 결론을 내릴 때 어셈블리 언어로 작성해야합니다. –

+0

어떤 기능이 필요합니까? 얼마나 더 많은 성능? 일반적으로 프로그래밍을 시작하기 전에 최적화하는 것은 좋은 전략이 아닙니다. –

+4

"항상 사용할 수있는 가장 높은 수준의 추상화를 사용하고 측정에 필요할 경우 낮은 수준의 추상화로 드롭 다운합니다." - Chris Hanson http://eschatologist.net/blog/?p=232 – 0x8badf00d

답변

3

Foundation (NSURL) 프레임 워크 클래스는 코드 CoreFoundation (CFURL)을 기반으로하는 경우가 많습니다.

CF 유형으로는 일반적으로 관련 함수를 사용하여 데이터를 조작하는 불투명 한 구조체로 작업합니다. 순수한 C 코드를 작성해야한다면 CF을 사용해야합니다. 그렇지 않으면 이들이 다소 어수선하고 장소에서 사용하기 어려울 수 있습니다.

오브젝티브 C 클래스는 또한 혼합 약간 코드와 일치해야하는 경우

이 번있다 브리징 카테고리 등

수신자 부담 전화를 추가 같은 추가 일을 할 수 있도록 그것은이다 많은 종류가 단순히 던져 질다는 것을 알기 편리하다. 예 : NSStringCFStringRef

대신 좀 URL 인코딩을 할 필요가 때이었다 최근이해야 할 일을했을 때의 예를 사용할 수있는합니다 (NSStringstringByAddingPercentEscapesUsingEncoding: 매우 그것을 잘라하지 않았다). 이 기능은 CFStringRef 필요한 년대를하지만, 간단한 캐스트 내가 사용할 수있는 내 NSString

일반적으로
CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, 
             (CFStringRef)stringToEncode, // <- NSString 
             NULL, 
             (CFStringRef)encodeChars, // <- NSString 
             kCFStringEncodingUTF8) 

당신이 멀리 얻을 수 있습니다 당신이해야 가능한 사용 Foundation 클래스 (추상화의 높은 수준) 등 그들은 대부분 동일한 기능을 제공 할 것입니다. 물론 내가해야만하는 인코딩과 같은 다른 시나리오가있을 것입니다.

2

objective-c 앱을 작성하는 경우 objective-c 버전을 사용하십시오. 일반적으로 CF 버전은 C 및 C++로 작성된 응용 프로그램이 시스템 API와 통신 할 수 있도록 존재합니다.

CF 버전이 더 세밀하게 제어 할 수있는 몇 가지 경우가 있습니다 (예 : CF 콜렉션이 objective-c 객체가 아닌 임의의 포인터를 저장하도록 구성 될 수 있음). 그런 종류의 미세 조정이 필요하면 CF 버전을 확인하십시오. 그렇지 않으면 objective-c 버전이 거의 항상 당신이 원하는 것입니다. 일반적으로 자신의 '하위 수준'의 유용성은보다 빠른 (복잡성이 증가하면서)보다 유연한 경우입니다.

(둘 사이의 속도 차이는 나노초 수준이며, 어느 시점에서 최적화해야하는 경우 NS-에서 CF-로 전환하면 답이 될 수 없습니다)

관련 문제