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
'source' 카테고리의 다른 글
봄/Java 오류: JDK 1.5 이상에서 네임스페이스 요소 'annotation-config'... (0) | 2023.09.01 |
---|---|
PowerShell의 "cd % program files%"에 해당합니까? (0) | 2023.08.27 |
파워셸에서 윈도우 프로세스용 도커를 다시 시작하는 방법은 무엇입니까? (0) | 2023.08.27 |
iPhone/iPad 브라우저 시뮬레이터? (0) | 2023.08.27 |
ORA-00907 오른쪽 괄호 없음 문제 - 내부 삽입 쿼리 순서로 선택 (0) | 2023.08.27 |