gpt4 book ai didi

ios - 如何区分Objective-C中不同库的代码?

转载 作者:行者123 更新时间:2023-11-28 07:57:46 25 4
gpt4 key购买 nike

例如,我在我的项目中使用了两个库(A 和 B)。库 A 中有一个自定义按钮类,B 中也一样。系统如何知道按钮来自哪个库?

最佳答案

库包含它们包含的类的列表。您可以使用命令行工具 otool 自行阅读此列表。 -o 开关可让您查看库的 Objective-C 部分:

The otool command displays specified parts of object files or libraries. ... -o Display the contents of the __OBJC segment used by the Objective-C run-time system.

因此,如果您键入 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) 的信息。函数dlopen()特别是从磁盘读取此信息的位置。

此外,库 A 和 B 中的自定义按钮类最好以不同的方式命名。如果不是,那么在运行时使用哪个是未定义的。两者都可以使用。这是因为 Objective-C 没有命名空间,所以它在运行时按名称查找。

关于ios - 如何区分Objective-C中不同库的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47523667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com