比较main函数内不使用注释部分代码和使用注释部分代码区别:c++
//不使用注释部分代码
#import <Foundation/Foundation.h>
#import "TestStaticLib.h"
int main() {
// TestStaticLib *lib = [TestStaticLib new];
// NSLog(@"test---%@",lib);
return 0;
}
复制代码
使用objdump --macho -d
查看__TEXT段markdown
//使用注释部分代码
#import <Foundation/Foundation.h>
#import "TestStaticLib.h"
int main() {
TestStaticLib *lib = [TestStaticLib new];
NSLog(@"test---%@",lib);
return 0;
}
复制代码
使用objdump --macho -d
查看__TEXT段 能够发现多出来截图部分的内容,也就是会把静态库代码合并当前到文件中 因此Dead Code Stripping 默认将不使用的代码会进行剥离函数
可是Category
是动态的,会有问题测试
1.建立一个静态库,添加一个类及这个类的分类 StaticLibClass文件ui
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface StaticLibClass : NSObject
@end
NS_ASSUME_NONNULL_END
#import "StaticLibClass.h"
@implementation StaticLibClass
@end
复制代码
分类文件StaticLibClass+Deadspa
#import "StaticLibClass.h"
NS_ASSUME_NONNULL_BEGIN
@interface StaticLibClass (Dead) -(void)testStaticLibClass;
@end
NS_ASSUME_NONNULL_END
#import "StaticLibClass+Dead.h"
@implementation StaticLibClass (Dead) -(void)testStaticLibClass {
NSLog(@"====testStaticLibClass");
}
@end
复制代码
2.将project
的文件拖到上面code
3.在
StaticLib.h
导入头文件orm
#import <StaticLib/StaticLibClass+Dead.h>
复制代码
4.编译后拿到动态库加到测试工程内图片
运行测试工程ip
出现找不到方法的错误,出现这个问题的缘由是dead code strip在连接的过程将分类的代码剥离了,因此解决这个问题须要在连接过程当中,告诉连接器如何处理。
5.配置连接器参数
6.再次运行
连接器参数: