gpt4 book ai didi

iphone - 导入新类包或“系统”的最佳方法?

转载 作者:行者123 更新时间:2023-12-03 20:47:17 25 4
gpt4 key购买 nike

这是针对高级开发人员的高级问题。

所以我写了一个比较大的“子系统”。本质上,它是一个称为CleverViewController的UIViewController,它是一个UIViewController。

现在,有许多支持类(大约十个)可以完成艰苦的工作:执行数学函数,图像处理,纯逻辑函数,构建图像或具有数千行代码的功能。

(为此,我只是启动了一个新的XCode项目/应用程序“ Scratchpad”,除了加载并启动CleverViewController外,它几乎没有其他作用。因此,当前它可以作为应用程序运行,它启动CleverViewController。我提到的十个左右的类是其中的一部分的“子系统”只是放在该项目/应用中。)

因此,现在,我们将在各种应用程序中使用新技术CleverViewController。 (或者也许朋友想使用它,等等。)

做到这一点的最佳方法是什么?我是否搞砸了所有内容,真的应该是一个(相当大)的类,而不是十几个类? (我可以理解,然后我将在需要的地方简单地添加新的(大)类,就像添加任何其他类一样。)

我是否必须像Apple框架那样制作“框架”? (如果是这样,他们到底是什么,怎么做,等等?!?)

实际上,您只需要勉强地包括所有十二个类,就是这样(很显然,可以将它们放在分组的子文件夹中)。

那所有的标题等等呢? (目前,我在便笺本项目的pch文件中只有一打包含。)

单独“维护”这个“子系统”不容易吗?

恐怕我对此一无所知:如果答案很明显,请打我一下,让我知道。

谢谢你的任何信息!

马修,如果您看到此信息...我正在寻找您的Framework链接,但没有看到它。

最佳答案

理想情况下,您将创建一个动态库(框架将被视为该库)。

但是Apple选择在iOS中禁止这样做,因此最好的方法是使用静态库。然后您使用此库创建一个xcodeproj并将其与源一起分发给您的朋友-这样他们就可以帮助开发了;)

使用静态库,每个可执行文件随后将代码(通过静态链接)复制到其应用程序。在osx中​​,分发objc类是一场噩梦(由于在加载类时使用平面名称空间-您会遇到运行时类冲突)。

客户端使用此库所需要做的就是将库的xcodeproj添加到其应用中,将其配置为构建依赖项,然后进行链接。一旦掌握了它,这很容易。

如果可能的话,最好用c或c ++编写它们,因为objc符号和依赖项可能不会从最终的可执行文件中删除-如果它们仅在库中使用一个类,则它们仍然必须附带所有类。

祝好运

编辑


  1)什么是静态|动态库?


在我对一个复杂主题的描述中要非常简短:
它们是可重用的二进制文件。如何使用,链接,合并和加载它们取决于图像类型。本质上,您可以通过编译产生该库的源文件的集合来创建共享库。然后,您只需将您的应用程序链接到库。这在软件开发中很方便。如果未将应用程序链接到Foundation.framework,则需要NSString的源才能使用该类。因此,它能够组织,分离和重用程序,从而大大简化了软件开发。这也很有用,因为当(例如)苹果更新操作系统(进而更新框架)时,您的应用程序可能会得到改善。这些更新会更改程序的执行-通常会更好,因为修复了错误并增强了性能。

更多细节:

http://en.wikipedia.org/wiki/Static_library

http://en.wikipedia.org/wiki/Shared_library


  2)您说“ ...使用此lib创建一个xcodeproj ...” ..如何创建“ lib”?


好的,此过程与iOS相似,但以下是在OS X上的操作方法(我在这里使用的是Xcode 3.2.x):


选择菜单项File> New Project
在项目模板选择器中,选择“框架和库”
对于框架,请选择“可可框架”。请注意,该框架根本不需要使用Cocoa,它可以是纯C或C ++-它只是一个模板,您可以在保存项目后更改模板的设置。
对于静态库,请选择“ BSD C库”,然后从下面的弹出窗口中选择“静态”
对于动态库,请选择“ BSD C库”,然后从下面的弹出窗口中选择“动态”


同样,除了默认情况下生成的实现文件和目标链接到的库的扩展名之外,许多模板实际上是相同的。


  3)当您说“分发objc类是一场噩梦”时,您的意思是例如如果我真的给你两个文本文件“ Soften.m”和“ Soften.h” ..?


在那种情况下,我的意思是:在某些情况下,分发具有objc类或类别的共享库是一场噩梦。问题在于,objc符号(任何定义的objc方法或类)在加载期间可能发生冲突。例如,将库加载到程序中时,来自2个单独的共享库的2个不同的类将发生冲突。

静态库不是问题-因为链接器将中止。但这是动态加载的问题,因为假设您有一个名为QTCaptureConnection的类,并且您的应用程序未链接到QTKit.framework(它也定义了此objc类)。如果您的应用程序的插件或加载到QTKit的可执行文件链接中的任何库,那么您将遇到objc加载冲突。

这意味着将仅加载一个类,并且在向您发送[[QTCaptureConnection alloc] init]消息时将返回一个类-两个依赖项之一将不会返回它们期望的类。这意味着加载到可执行文件中的每个二进制映像的每个类名称和方法都必须是唯一的。大多数时候,这是您无法控制的。最明显的情况是开发插件。如果您正在开发插件,这还意味着您必须重命名分发的每个插件重用的每个类,或分发共享类的共享库-在许多情况下,这不是一个选择。


  4)“ ..将lib的xcodeproj添加到他们的应用程序中”-您如何做到这一点?


您可以将Finder中的xcodeproj拖到Xcode中的打开项目中,就像处理头文件一样(但您不复制文件或将其添加到目标中)。然后Xcode更新引用,添加项目的符号(例如,类名,函数),然后您就可以将所拖动项目的目标配置为依赖项,并可以链接到项目的库。


  5)c / ++可以理解,但是在这里不可行(我不认为)


这取决于库的功能。最终,没有单独使用C不能近似的c ++或objc功能。如此...您通常可以使用C或C ++来实现所需的功能。由于某个应用可能需要几个不同的库中的一个小功能,而每个库可能只有几个MB,因此该问题一发不可收拾。因此所有这些库都可以向最终应用添加(例如)20 MB。如果可以删除这些符号,则客户端(使用库)将只为他/她所说的(二进制大小)付款。因此,可以从最终应用程序中删除19 MB的未使用内容(也可以避免其他问题)。


  6)苹果公司的“框架”项目到底是什么(UIKit,CoreGraphics等),在这里适合什么?


典型共享库的最大限制之一是它们将仅包含一个二进制映像(仅是编译后的代码)。因此,人们想出了无数种方法来将他们想要/需要分发的其他内容合并到二进制文件中,这些二进制文件是库的依赖项。示例包括图形/图像或基于文本的文件。

框架很酷,因为它们充当动态库,但是它们也是目录结构。使用框架,您可以只复制库使用的图像,pdf,nib文件等。

如果您使用的是静态库,则客户端(重用该库)将必须手动将每个资源添加到其应用程序的复制文件构建阶段,确保它们存在,并在应用程序和库成熟时保持同步。使用框架,大部分依赖项都将被删除。看看/System/Library/Frameworks/AppKit.framework/中的所有内容-它包含二进制文件(包括大量objc类的实现),大量本地化图像,nib文件,本地化字符串文件,标头文件和其他重要数据。

关于iphone - 导入新类包或“系统”的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4677606/

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