source

C 함수 대.목표-C 방법?

nicesource 2023. 8. 27. 09:40
반응형

C 함수 대.목표-C 방법?

둘 사이의 차이점은 무엇입니까?프로그램을 작성하는 경우 다음 작업이 필요합니다.

void aFunction() {
    //do something
}

언제쯤이면 이런 게 필요할까요?

-(void)aMethod {
    //do something else
}

사실, 목표-C 방법은 시작 부분에 항상 두 개의 인수가 있는 C 함수일 뿐입니다.

다음 항목:

-(void)aMethod;

이 값과 정확히 일치합니다.

void function(id self, SEL _cmd);

목표-C의 메시지는 다음과 같습니다.

[someObject aMethod];

이와 정확히 일치합니까? (거의 -- 이 답변의 범위를 벗어나는 변수 인수 ABI 문제가 있습니다.)

objc_msgSend(someObject, @selector(aMethod));

objc_msgSend()는 (찾아봄으로써) 메서드의 적절한 구현을 찾습니다.someObject그런 다음 테일 콜 최적화의 마법을 통해 다음과 같이 보이는 C 함수 호출과 정확히 동일하게 작동하는 메소드의 구현으로 점프합니다.

function(someObject, @selector(aMethod));

꽤 말 그대로, Objective-C는 원래 C 전처리기에 지나지 않는 것으로 구현되었습니다.오브젝티브-C에서 할 수 있는 모든 것은 스트레이트 C로 다시 작성될 수 있습니다.

하지만, 그렇게 하는 것은 완전히 고통스러울 것이고 그렇게 하는 것의 믿을 수 없을 정도로 교육적인 경험 이상으로 시간을 낭비할 가치가 없습니다.


일반적으로 객체와 대화할 때는 Objective-C 메서드를 사용하고 straight Coup으로 작업할 때는 함수를 사용합니다.거의 대부분의 Mac OS X와 iOS가 목표-C API를 제공한다는 점을 고려하면, UI 레벨 프로그래밍 진입점에 대해서도 마찬가지입니다. 그러면 대부분 Obj-C를 사용하게 됩니다.

상대적으로 독립적인 모델 레벨 코드를 작성할 때도 객체 지향 프로그래밍의 기본 테넌트인 상태/데이터 및 기능 간에 매우 자연스러운 접착제를 제공하기 때문에 일반적으로 Objective-C를 사용합니다.

Objective-C에서 각 함수는 다음과 같은 객체에 대해 작동합니다.

[myObject myFunction]

C 방법의 형식은 다음과 같습니다.

return-type function-name(argument1, argument2, etc) {}

Objective-C 인스턴스 메서드의 형식은 다음과 같습니다.

-(return-type)function-name:argument1 {}

또는 다중 신호 함수의 경우

-(return-type)function-name:argument1 function-name:argument2 {}

저는 Obj-C 프로그래밍에서 Objective-C 스타일 메소드를 항상 사용합니다. C 타입 함수도 사용할 수 있습니다.

나는 C의 등가물이[myObject myMethod:arg]지도 모른다myObject.myMethod(arg)

첫 번째는 독립 함수입니다.두 번째는 Objective-C 클래스의 인스턴스 메서드입니다.그래서 저는 당신이 실제로 수업을 쓰고 있다면 두 번째 버전이 필요할 것이라고 생각합니다.

언급URL : https://stackoverflow.com/questions/4846825/c-function-vs-objective-c-method

반응형