1

Foundation의 NSBundle은 Objective-C에서 동적 코드를로드하는 가장 좋은 방법입니다. -load 메서드는 번들의 실행 코드를 실행중인 프로그램에 동적으로로드합니다.NSBundle의 -load 메소드는 클래스와 다른 런타임 리소스를 Objective-C 런타임에 어떻게 등록합니까?

그러나 Objective-C 런타임 공용 함수는 NSBundle의 -load 메서드를 사용하여 동적 라이브러리를로드하고 Objective-C 런타임에서 클래스, 범주, 프로토콜, 메서드, 선택기 등을 등록하는 데 사용합니까? 어떤 헤더에 선언되어 있습니까?

+0

어떤 헤더가 _what_로 선언 되었습니까? 런타임 기능 목록을 요청하고 있습니까? http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html? 아니면 NSBundle이 수행하는 특정 절차에 대한 세부 정보를 원하십니까? –

+0

'-load' 메서드에서 사용하는 런타임 함수 목록에서 함수를 요청하면 obj-c 런타임에서 번들의 클래스, 메서드, 선택기 및 기타 리소스를 등록합니다. 그 기능들 중 아무 것도 그렇게 보이지 않기 때문입니다. – LuisABOL

답변

2

NSBundle은 ObjC 런타임을 사용하지 않습니다. 그것은 dlopen을 사용하고 동적 링커는 로딩을 처리합니다.

+0

NSBundle은 dlopen을 확실히 사용하지만 런타임 시스템은로드 된 클래스를 추적해야합니다. 따라서 파일에 컴파일 된 C 함수 만 있으면 (예 : dlopen이면 충분합니다). 그러나 Objective-C 클래스 선언이 포함되어 있으면 objc-runtime에 등록해야합니다. 어떻게 이뤄지나요? – LuisABOL

+1

map_images_nolock, http://www.opensource.apple.com/source/objc4/objc4-532.2/runtime/objc-os.mm에는 –

+1

에 대한 공개 API가 없습니다 (취소해야 함 : dyld가 objc 런타임을 호출 함). , 그 기능을 사용하는) –