Captain Hook 분석
Objective-C는 결국 C 언어로 번역됩니다. 물론 constructor/destructor와 이 두 속성을 더한 함수는 각각 실행 가능한 파일(또는 shared library)load와 unload에서 호출됩니다.
main()
함수 호출 전과return 후에 실행되는 것으로 이해할 수 있습니다.실제로 constructor는
+load
이후에dyld(동적 링크기)가 처음에 objc runtime에 모든 클래스를 불러오라고 알렸기 때문에, 클래스를 불러올 때마다 +load가 호출되고, 모두 불러온 후에dyld는 모든constructor 방법을 호출합니다CaptainHook도 이 원리를 이용하여 이루어진 것으로 다음과 같은 몇 가지 장점이 있다.
+load
와 같이 한 Class에 쓰지 않아도 된다__attribute__((constructor))
static void beforeMain(void) {
NSLog(@"beforeMain");
}
__attribute__((destructor))
static void afterMain(void) {
NSLog(@"afterMain");
}
int main(int argc, const char * argv[]) {
NSLog(@"main");
return 0;
}
여러 개의 constructor가 있고 우선순위를 제어하려면attribute((constructor(101))로 작성할 수 있습니다. 숫자가 작을수록 우선순위가 높고 1~100은 시스템에 보존됩니다.
뭐가 잘못됐는지 댓글로 많이 올려주세요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.