iPhone&;iPad-包括一个类会增加二进制吗?

iPhone&;iPad-包括一个类会增加二进制吗?,iphone,iphone-sdk-3.0,ipad,Iphone,Iphone Sdk 3.0,Ipad,我有一个在我的项目中经常使用的自定义类。这个类有几个方法,但不是所有的方法都在每个项目中使用 我的问题是:在一个项目中包含这个类会给项目带来无用的代码,还是编译器只包含使用的方法 我的意思是,如果我的类有30个方法,但在一个给定的项目中只使用了4个,那么编译器会包括其他未使用的26个方法,还是只包括最终产品中使用的4个方法 如果它包括所有,有没有办法强迫它忽略未使用的方法并将二进制文件修剪到最小值?如果其他26种方法在@implementation中有代码,那么是的,它们将在最终产品中使用 原因

我有一个在我的项目中经常使用的自定义类。这个类有几个方法,但不是所有的方法都在每个项目中使用

我的问题是:在一个项目中包含这个类会给项目带来无用的代码,还是编译器只包含使用的方法

我的意思是,如果我的类有30个方法,但在一个给定的项目中只使用了4个,那么编译器会包括其他未使用的26个方法,还是只包括最终产品中使用的4个方法


如果它包括所有,有没有办法强迫它忽略未使用的方法并将二进制文件修剪到最小值?

如果其他26种方法在
@implementation
中有代码,那么是的,它们将在最终产品中使用

原因在于运行时系统。即使在编译时没有使用这26个方法,也不能保证它们在运行时不会被引用(请记住
NSSelectorFromString
-performSelector:

我不知道是否有办法强制删除这些代码。(
-dead_strip
不起作用。)

链接器支持,如果打开它,未使用的代码不应导致任何膨胀

从:

静态链接器(ld)支持 删除未使用的代码和数据块 从可执行文件。这个过程 (称为死代码剥离)帮助 减少系统的总体规模 可执行文件,这反过来又提高了 通过减少内存来提高性能 可执行文件的封装外形。它也 允许程序成功链接 当未使用的代码引用 未定义的符号(而不是结果符号 在链接错误中)

死代码剥离不限于 仅删除未使用的函数和 二进制文件中的可执行代码。这个 链接器还会删除任何未使用的符号 以及驻留在数据块中的数据。 这些符号可能包括全球符号 变量、静态变量和 字符串数据等

启用死代码剥离时, 静态链接器搜索代码 这是无法从首字母开始的 一组活动符号和块

我的问题是:包括这门课 在一个项目上会使项目膨胀 使用无用的代码,否则编译器将 只包括使用的方法

我认为您所说的是包含helper类的头和实现。这将增加二进制大小。正如jessecurry所指出的,链接器支持死端剥离。这是坏的,因为总是有可能有人想链接到你的二进制的公共API(幸运的是,这不是动态链接不允许在iPhone上,而是考虑其他平台)。但我敢打赌,大小上的差异太小了,不太明显


就大小而言,影响最大的通常是应用程序中包含的资源(图像、字符串等)。

听起来您需要重构并重命名这个庞大的mamma类。

这也是我最初的想法。杰西:不,不,不,正好相反。这些ObjC代码永远不会被删除,即使您添加了
\uuuuu attribute\uuuuu((未使用))
(被忽略)。作为hones,我不确定Objective-C是否正确。因为它是一种动态语言,可以按名称调用方法。所以链接器不知道该剥什么和保留什么。我相当肯定St3fan和KennyTM是正确的。死代码剥离只对C和C++有用。另请参阅。对于一个真正有意义的答案,我感到非常荣幸。Objective-C中没有理由使用大型mamma类。当需要使用大型mamma类时,库太容易精简并包含在.pch文件中。