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