2012-01-12 7 views
1

나는 그것에 C 함수가있는 객관적인 c 클래스가 있습니다. 그 C 함수에서 다른 클래스의 다른 c 함수를 호출하려고합니다. 일류 C 함수다른 클래스에서 c 함수를 호출

난 이렇게 :

HelloWorldLayer *ran; 
    ran=[[HelloWorldLayer alloc] init]; 
    [ran showDigital:BinaryWord]; 

HelloWorldLayer은 C 함수가 다른 클래스이다

void showDigital(int word[4])

하고는도 선언 .

첫 번째 클래스에서 다른 기능을 호출하려고 할 때 showDigital 기능을 찾을 수 없다는 메시지가 표시됩니다.

사실은 C 함수와 관련이 있습니까?

감사합니다.

답변

1

우선 C 함수는에서 이 아니며 다른 클래스와 동일한 파일에 있습니다. Objective-C 클래스에는 함수가 아닌 메소드가 있습니다.

외부 함수 선언이있는 곳이라면 어디서든 C 함수를 호출 할 수 있습니다. 예 :

extern void showDigital(int* word); 

당신이 정말로 함수가 클래스의 인스턴스와 연결하려면 HelloWorldLayer.h, 당신은 그것을 목표 -C 방법을 확인해야합니다.당신은 당신이 좋아하는 경우에 그 방법은 원래의 기능을위한 얇은 래퍼가 될 수 있습니다 : 당신이 당신의 C 함수는 객체의 일부 척하려는 경우, 당신은으로 수신기 개체를 추가해야합니다

-(void) showDigital: (int*) word 
{ 
    showDigital(word); 
} 

매개 변수. 그래도 여전히 개인 인스턴스 변수에 직접 액세스 할 수는 없습니다.

void showDigital(id self, int* word) 
{ 
    [self foobar]; 
} 
+0

숫자로 배열을 전달해야하므로 c로 대문자 c 함수로 사용할 수 없습니다. 객관적인 c NSArrays는 C 함수로 작업 할 필요가없는 숫자를 얻지 못합니다. 내 질문은 : 다른 클래스의 C 함수를 어떻게 호출할까요? – Curnelious

+0

괜찮아. extern을 넣고 showDigital (BinaryWord)으로 호출합니다. 저것은 작동한다. 고마워. – Curnelious

+0

하지만 지금 또 다른 문제가 있습니다. 내가 C/C 함수를 사용해야한다고 가정 할 수 있습니다. 그리고 나서 내가 거기에서 뭔가를 계산할 때 나는 그것을 같은 클래스에있는 다른 목적 c의 메소드에 전달할 필요가 있습니다. 내가 어떻게 그럴 수 있니? C 함수의 모든 데이터가 거기에 머물러 있습니까? 위선자 나는 C somethimes를 사용하고 객관적인 방법으로 데이터를 전달합니까? – Curnelious

2

C 함수 또는 Objective-C 메서드를 호출 하시겠습니까? 당신은 모든 용어를 혼란스럽게합니다. 난 당신이 HelloWorldLayer에 오브젝티브 C 방법을 정의하고 그에게 전화 할 생각, 그래서 여기에 같은 헤더가 보일 것입니다 것입니다 : 당신이 수행하여 메소드를 호출 할 수 있습니다

HelloWorldLayer.h 그런

@interface HelloWorldLayer : NSObject 

- (void)sendDigital:(int[4])word; 

@end 

무엇 당신은 이미 시도했습니다.

Objective-C 클래스 내에 C 함수를 선언 할 수 없습니다. @interface 블록에 정의 할 수 있지만 Objective-C 클래스의 일부는 아닙니다. Objective-C 메소드 만이 클래스의 일부가 될 수 있습니다.

그래서 예를 들어 당신은 정말 정말정말 당신이 할 수 원하는 경우 :

HelloWorldLayer.h

@interface HelloWorldLayer : NSObject 

void sendDigital(int[4] word); 

@end 

을하지만 sendDigital를 호출 할 때이처럼해야 할 것입니다 :

int word[4] = {1,2,3,4}; 
sendDigital(word); 

그리고 너는 HelloWorldLayer 주위에. 이제 차이점을 이해합니까? 정말 C 함수가 아닌 Objective-C 메서드로 메서드를 정의해야한다고 생각합니다.

+0

아니요. 오류 일 수 있습니다. 내가 C 함수를 선언한다고 말했고 C 함수는 다음과 같습니다 : void, NOT - (void). – Curnelious

+0

그러나 Objective-C 방법을 사용하고 있습니다. 당신이 원하는 것을 결정하고 그것에 충실하십시오. – mattjgalloway

+0

그래서 C 함수를 어떻게 호출할까요? 내 부름이 잘못되었습니다. – Curnelious

관련 문제