2010-12-15 2 views
0

일부 도우미 함수를 정의하고 objective-C 대신 C로 작성하는 것이 좋습니다.Objective-C에서 C 정의를 사용하십시오.

Objective C 프로젝트에서 헤더와 구현 C 파일을 추가하는 "모범 사례"는 무엇입니까?

내 함수에서 Objective-c 정의를 사용해야하는 경우 내 머리글 C 파일 (UIKit?)에 무엇을 포함해야합니까?

예 : NSString 용 NSLog에 대한 바로 가기를 만들고 싶습니다.이 코드와 비슷한 C 파일을 만들 수 있습니까? : 소스 파일 (C/OBJ-C 코드로 컴파일하는 .m 확장 또는 형식 엑스 코드에서 수동으로 설정 한 경우

void MYLog (NSString *string){ 
    NSLog(@"%@",string); 
} 
+0

왜'NSLog()가'취할 하나의'NSString'가 이미 optionaly ** 문자열을, 그리고 ** 이상의 매개 변수에 대한 바로 가기를 만들? – PeyloW

+0

내가 C API를 여기 만들었을 때마다, 나는 그것을 후회했다. Objective-C 버전은 그다지 많은 작업이 아니며, 많은 양의 오버 헤드가 발생하지 않는다. C와 상당히 다재다능합니다. – bbum

+0

ehm ... 당신이 옳다는 Peylow는 완전히 쓸모가 없습니다 ... 질문을 공식화하는 데 도움이되는 예제입니다 : P -.- – MatterGoal

답변

2

예 확실히 당신은 당신의 C 코드 (또는 그 반대)에 목표 - C의 기능을 사용할 수 있습니다)

핵심 기능을 작동 시키려면 수입 <Foundation/Foundation.h><UIKit/UIKit.h>으로 충분해야합니다. 이러한 헤더는 미리 컴파일 된 헤더 (* .pch 파일)에 이미 가져올 수 있으므로 가져올 필요조차 없습니다.

일부 UIKit 클래스를 확장하려면 일반 c 함수 대신 사용자 정의 클래스 범주를 구현하는 것도 고려하십시오.

+0

그리고 C 코드를 .m 파일에 넣어'@ "foo "컴파일러가 이해하고 있습니다. – JeremyP

+0

예, 좋은 지적입니다. 답변을 업데이트 드리겠습니다. – Vladimir

0

매우 쉽게 수행 할 수 있습니다. UIKitFoundation이 이미 접두사 헤더로 가져 오기 때문에 아무 것도 가져올 필요가 없습니다. 로거 기능은 다음과 같을 것이다 :

// Logger.h 
void MyLog(NSString *str); 

// Logger.m 
#import "Logger.h" 
void MyLog(NSString *str) {…} 
+0

zoul에 감사드립니다. 귀하의 의견으로는 .c 확장자를 사용하거나 .m을 사용해야합니다. – MatterGoal

+0

컴파일러가 Objective-C를 이해할 수 있도록'.m'을 사용해야합니다. – zoul

관련 문제