Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何区分Objective-C中不同库的代码?_Ios_Objective C_Swift - Fatal编程技术网

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

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

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

库包含它们所包含的类的列表。您可以使用命令行工具
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没有名称空间,所以它在运行时按名称查找。我仍然不知道可以使用哪些数据来区分不同的库。我添加了一些关于在运行时动态加载类的附加信息。我仍然不知道可以使用哪些数据来区分不同的库。我添加了一些关于在运行时动态加载类。