Ios 如何区分Objective-C中不同库的代码?
例如,我在我的项目中使用了两个库(A和B),库A中有一个自定义按钮类,库B中也有一个自定义按钮类。Ios 如何区分Objective-C中不同库的代码?,ios,objective-c,swift,Ios,Objective C,Swift,例如,我在我的项目中使用了两个库(A和B),库A中有一个自定义按钮类,库B中也有一个自定义按钮类。 系统如何知道按钮来自哪个库?库包含它们所包含的类的列表。您可以使用命令行工具otool自己阅读此列表。使用-o开关可以查看库的Objective-C部分: otool命令显示对象文件或库的指定部分。 ... -o显示Objective-C运行时系统使用的_OBJC段的内容 因此,如果您键入otool-o/Applications/TextEdit.app/Contents/MacOS/TextEd
系统如何知道按钮来自哪个库?库包含它们所包含的类的列表。您可以使用命令行工具
otool
自己阅读此列表。使用-o
开关可以查看库的Objective-C部分:
otool命令显示对象文件或库的指定部分。
...
-o显示Objective-C运行时系统使用的_OBJC段的内容
因此,如果您键入otool-o/Applications/TextEdit.app/Contents/MacOS/TextEdit
,您将得到如下输出:
Contents of (__DATA,__objc_classlist) section
000000010001cf80 0x100021c50
isa 0x100021c78
superclass 0x0
cache 0x0
vtable 0x0
data 0x10001db80 (struct class_ro_t *)
flags 0x10
instanceStart 104
instanceSize 288
reserved 0x0
ivarLayout 0x0
name 0x10001954f Document
baseMethods 0x10001d030 (struct method_list_t *)
entsize 24
count 78
name 0x10001591d makeWindowControllers
types 0x10001979b v16@0:8
imp
name 0x100015fee writableTypesForSaveOperation:ignoreTemporaryState:
types 0x10001987f @28@0:8Q16c24
imp
当进程要求操作系统打开共享库或插件包时,操作系统将读取上述数据并生成库包含的类列表。它还查找导出的函数。您可以阅读有关动态链接器和加载程序(dyld)的信息。该功能特别适用于从磁盘读取此信息
此外,库A和库B中的自定义按钮类最好使用不同的名称。如果不是,那么在运行时使用哪一个是未定义的。任何一个都可以被使用。这是因为Objective-C没有名称空间,所以它在运行时按名称查找对象。库包含它们所包含的类的列表。您可以使用命令行工具
otool
自己阅读此列表。使用-o
开关可以查看库的Objective-C部分:
otool命令显示对象文件或库的指定部分。
...
-o显示Objective-C运行时系统使用的_OBJC段的内容
因此,如果您键入otool-o/Applications/TextEdit.app/Contents/MacOS/TextEdit
,您将得到如下输出:
Contents of (__DATA,__objc_classlist) section
000000010001cf80 0x100021c50
isa 0x100021c78
superclass 0x0
cache 0x0
vtable 0x0
data 0x10001db80 (struct class_ro_t *)
flags 0x10
instanceStart 104
instanceSize 288
reserved 0x0
ivarLayout 0x0
name 0x10001954f Document
baseMethods 0x10001d030 (struct method_list_t *)
entsize 24
count 78
name 0x10001591d makeWindowControllers
types 0x10001979b v16@0:8
imp
name 0x100015fee writableTypesForSaveOperation:ignoreTemporaryState:
types 0x10001987f @28@0:8Q16c24
imp
当进程要求操作系统打开共享库或插件包时,操作系统将读取上述数据并生成库包含的类列表。它还查找导出的函数。您可以阅读有关动态链接器和加载程序(dyld)的信息。该功能特别适用于从磁盘读取此信息
此外,库A和库B中的自定义按钮类最好使用不同的名称。如果不是,那么在运行时使用哪一个是未定义的。任何一个都可以被使用。这是因为Objective-C没有名称空间,所以它在运行时按名称查找。我仍然不知道可以使用哪些数据来区分不同的库。我添加了一些关于在运行时动态加载类的附加信息。我仍然不知道可以使用哪些数据来区分不同的库。我添加了一些关于在运行时动态加载类。