Foundation的NSBundles是在Objective-C中加載動態代碼的最佳方式。 -load
方法將包的可執行代碼動態加載到正在運行的程序中。NSBundle的-load方法如何使用Objective-C運行時註冊類和其他運行時資源?
但是,NSBundle的-load
方法使用哪種Objective-C運行時公共函數來加載動態庫,並使用Objective-C運行時註冊類,類別,協議,方法,選擇器等?它聲明瞭哪個頭文件?
Foundation的NSBundles是在Objective-C中加載動態代碼的最佳方式。 -load
方法將包的可執行代碼動態加載到正在運行的程序中。NSBundle的-load方法如何使用Objective-C運行時註冊類和其他運行時資源?
但是,NSBundle的-load
方法使用哪種Objective-C運行時公共函數來加載動態庫,並使用Objective-C運行時註冊類,類別,協議,方法,選擇器等?它聲明瞭哪個頭文件?
NSBundle不使用ObjC運行庫。它使用dlopen,動態鏈接器處理加載事物。
NSBundle確實使用dlopen,但運行時系統必須跟蹤加載的類。因此,如果該文件僅包含編譯的C函數,例如,dlopen就足夠了。但是如果它包含Objective-C類聲明,則需要使用objc-runtime註冊它們。這是如何完成的? – LuisABOL
map_images_nolock,在http://www.opensource.apple.com/source/objc4/objc4-532.2/runtime/objc-os.mm,這裏沒有公開的API –
(很明顯:dyld調用到objc運行時,它使用該功能) –
哪個標頭被_what_聲明?你只是要求的運行時功能列表:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html?或者你想要了解NSBundle所經歷的特定過程的細節? –
我要求'-load'方法使用的運行時函數列表中的函數確實使用obj-c運行時註冊了bundle的類,方法,選擇器和其他資源。因爲這些功能似乎都沒有這樣做。 – LuisABOL