Objective-C 分类性能

4
如果我使用分类来分解我的Objective-C类的实现成多个@implementation块,那么结果应用程序的二进制会变大或影响性能吗?
显然,您无法在运行时获取类别的详细信息?。 因此,在其他条件相同的情况下,没有类别的情况下,应用程序的结果二进制文件是否相同?
背景
我有一个自定义的UIViewController子类,它变得相当复杂。

iOS Developer Library:Programming with Objective-C:Categories

除了向现有类添加方法之外,您还可以使用类别将复杂类的实现分割成多个源代码文件。 例如,如果几何计算、颜色和渐变等比较复杂,则可以将自定义用户界面元素的绘图代码放在与其他实现不同的文件中。

#pragma mark相比,类别的另一个好处是Xcode可以折叠整个@implementation块(但不能折叠两个#pragma mark之间的代码)。如果您想将类别(可选折叠)保留在同一文件中作为主类,则此功能非常有用。

一个分类需要一点时间来动态加载,没有其他性能问题。 - user529758
除非你有数百个类,否则不必担心代码加载时间。无论如何,在iOS上你无法做任何关于它的事情,因为动态代码加载通常是被禁止的。 - nielsbot
这里是翻译内容,与iOS无关。 - Daij-Djan
3个回答

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

2

分类是动态加载的,然后与原始类“合并”。当然,这种动态加载会产生一些开销,但一旦完成,对它的方法调用就不会再产生任何额外的开销。


0
如果编译器类似于C ++,那么它可能只是将新函数添加到类的虚拟方法表中。我要声明我在做出假设;但是这似乎很合理,因为编译器严格禁止您添加实例变量。至于代码组织,根据下面链接的文档,我认为你应该没问题: http://objc.toodarkpark.net/moreobjc.html#756:章节"How Catergories are used"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接