目标-C 类别性能



如果我使用类别将我的Objective-C类的实现分解为多个@implementation块,这会使我的iOS应用程序生成的二进制文件变大还是会影响性能?

显然,您无法在运行时获取类类别的详细信息?那么,假设其他条件都相同,生成的二进制文件不应该在有或没有类别的情况下相同吗?

背景

我有一个自定义的UIViewController子类,它变得相当复杂。

iOS 开发者库 : 使用 Objective-C 编程 : 分类

除了仅向现有类添加方法外,还可以使用类别将复杂类的实现拆分到多个源代码文件中。例如,如果几何计算、颜色和渐变等特别复杂,则可以将自定义用户界面元素的绘图代码放在单独的文件中,以执行的其余部分。

类别的另一个好处(例如,与#pragma mark相比)是 Xcode 允许您对整个@implementation块进行代码折叠(但不是两个#pragma mark之间的代码)。如果要将类别(可选折叠)与主类保留在同一文件中,这将非常有用。

链接器尽可能合并类和类别。如果您的类及其类别在构建时都链接到同一个可执行文件中,则成本为零。

井类别是动态加载的,然后与原始类"组合"。当然,这种动态加载会产生一些开销,但是一旦完成,对它的方法调用就不会产生任何进一步的开销

如果编译器类似于 c++,那么它可能只是将新函数添加到类的虚拟方法表中。我要声明我正在做一个假设;但是,这似乎是合乎逻辑的,因为编译器严格禁止您添加实例变量。就代码组织而言,我认为根据以下链接的文档,您应该没问题:

http://objc.toodarkpark.net/moreobjc.html#756 : "如何使用分类"部分

最新更新