ios - category重写系统方法的调用顺序是怎么样的?
天蓬老师
天蓬老师 2017-04-18 09:42:19
0
2
590

我知道category方法是可以覆盖系统的方法,但是当有几个category重写同一个方法的时候调用顺序是怎么样子的啊?我开始写代码测试了一下,看不出来是按什么顺序来的,总是后面创建的category的方法被调用,其他的都被覆盖了。。。很想知道这是为什么,怎么证实这一点,依据是什么。。。有知道的朋友指点一下下咯☺

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

모든 응답(2)
伊谢尔伦

런타임 메시지 전달 메커니즘의 핵심 함수 void objc_msgSend(id self,SEL cmd,...)에 따라 메시지를 보내려면 먼저 현재 클래스에서 호출 메서드를 찾고, 찾을 수 없으면 다음에서 계속 호출하세요. 해당 상위 클래스를 계층별로 살펴보면, 카테고리에 대해 동일한 메소드를 다시 작성하면 메시지 전달 과정에서 해당 카테고리의 메소드를 먼저 찾아 실행하게 됩니다. 여러 카테고리가 동일한 메소드를 호출하기 위해 Xcode는 런타임 시 buildPhases->Compile Sources에서 위에서 아래 순서에 따라 컴파일됩니다. 후입선출 방식에 따라 컴파일 중에 여러 카테고리가 스택에 푸시됩니다. 원칙적으로 사후 컴파일된 메서드가 먼저 호출됩니다. objc_msgSend가 메서드를 찾아 호출하면 더 이상 메시지를 전송하지 않으므로 소위 재정의가 형성됩니다. 반드시 나중에 생성된 것이 호출된다는 의미는 아닙니다. 생성 후 buildPhases->Compile Sources의 위치에 따라 달라집니다.

Ty80

런타임 로딩 분류 방법 순서에 따라 재정의
일반적으로 마지막 분류 로딩 방법을 구현합니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿