4

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

显然,您无法在运行时获取类的类别详细信息?. 那么,假设所有其他条件相同,生成的二进制文件是否应该与类别相同或没有类别?

背景

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

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

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

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

4

3 回答 3

10

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

于 2013-10-25T22:39:08.503 回答
2

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

于 2013-10-25T20:22:57.317 回答
0

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

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

于 2013-10-25T20:23:53.050 回答