比較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.再次運行
連接器參數: