2011-01-13 1 views
0

Objective-C에서 C 함수가 있는지 테스트 할 방법이 있습니까? "respondsToSelector"와 같은 것을 찾고 있지만 C 함수의 경우입니다.Objective-C/iOS - C 함수의 존재 여부를 테스트 하시겠습니까?

특히 iOS에서 "UIGraphicsBeginImageContextWithOptions (CGSize 크기, BOOL 불투명>, CGFloat 크기)"의 존재를 테스트하려고합니다.

감사합니다.

+1

당신은'UIGraphicsBeginImageContextWithOptions'은 아이폰 OS 4.0 이상에 있음을 알고 있다면, 앱이 실행중인 iOS 버전을 확인할 수 있습니다. 이렇게하는 것이 더 좋은 방법입니다. –

+0

나는 그것이 더 나쁜 방법이다. 가능한 경우 버전 검사 대신 사용하려는 기능을 확인해야하며 가능하면 가능합니다. – Ken

+0

이 옵션을 연구했지만 버전 검사는 문제가 있습니다. 애플이 미래의 장치에서 명명 규칙을 바꿀 수있어서 ... 다른 S.O. 게시물, 많은 사람들이 운영 체제 버전을 확인하는 것이 좋습니다 것으로 나타났습니다. 생각? – RyanM

답변

9
if(&UIGraphicsBeginImageContextWithOptions != NULL) 
    UIGraphicsBeginImageContextWithOptions(); 
    else NSLog(@"No UIGraphicsBeginImageContextWithOptions function"); 
+0

감사합니다. 이것은 완벽하게 작동합니다. – RyanM

+0

[이 문서 도움말] (https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html#//apple_ref/doc/uid/20002378-106633-CJBGFCAC) 'if (MyWeakLinkedFunction! = NULL)'이 아니라'if (MyWeakLinkedFunction! = NULL)'입니다. 앰퍼샌드를 왜 추가 했습니까? –

+0

@IulianOnofrei 변화가 없습니다. C에서 함수는 포인터를 자동으로 포인터로 변환하므로 두 함수가 동등합니다. – ughoavgfhw

2

예, weak linking의 설명서를 참조하십시오.

함수를 호출하기 전에 함수 포인터가 NULL인지 확인하는 작업이 필요합니다. UIGraphicsBeginImageContextWithOptions 이후

+0

매우 도움이되었습니다. 나는 이미 약한 프레임 워크를 연결하는 것에 대해 알고 있었지만 그 유형이 함수/등으로 확장되었다는 것을 알지 못했다. 감사. – RyanM

1

은 iOS 4.0 버전에서만 존재하고 나중에, 당신은 __IPHONE_OS_VERSION_MAX_ALLOWED macro와 아이폰 OS의 대상 버전을 확인할 수 있습니다

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000 
    UIGraphicsBeginImageContextWithOptions(...); 
#else 
    // Function not available, fail gracefully 
#endif 
+0

나는 이것이 낡은 대답이라는 것을 알고있다. 그러나 나는 당신이'__IPHONE_OS_VERSION_MAX_ALLOWED'보다는'__IPHONE_OS_VERSION_MIN_REQUIRED'를 의미한다고 생각한다. iOS 5를 지원하는 버전을 사용한다고해서 최소 타겟이 4.0 이상인 것은 아닙니다. 분명히 허용 된 답변이나 여기에 설명 된대로 런타임 검사가 더 좋습니다. http://stackoverflow.com/questions/3339722/check-iphone-ios-version – Rob

관련 문제