一.swift与Objective-c混编下减小包大小
在Swift&Objective-c混编优化下,如何进一步减小代码体积大小?
二.解决方案
1.取消整个类导出Objective-c方法
例如:类只在swift模块调用的情况
1
2
|
@objc class STXXXXXBuilder: NSObject {
}
|
调整为
1
2
|
class STXXXXXBuilder{
}
|
2.取消类中非公有方法或扩展导出
1
2
3
4
5
6
7
8
|
/// XXXX页面
class STXXXXController: STBaseTableViewController
}
extension STXXXXController {
}
|
调整为
1
2
3
4
|
fileprivate extension STXXXXController {
}
|
3.取消类中部分swift方法导出Objective-c方法
例如:像UI控件,列表之类
1
2
3
4
5
6
|
SWIFT_CLASS("_TtC24SogouTranslatorDeveloper19STBaseTableViewCell")
@interface STBaseTableViewCell : UITableViewCell
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER SWIFT_AVAILABILITY(ios,introduced=3.0);
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end
|
若STBaseTableViewCell的基类不想导出
initWithCoder和initWithStyle方法,减小文件大小,可禁止这两个方法的oc方法导出,如下所示
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class STXXXXCell: STBaseTableViewCell {
@IBOutlet var buttons: [STXXXXButton]!
@nonobjc override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
@nonobjc required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
|
三.优化效果
四.其它
可以想下swift类中IBOutlet/IBAction为什么是导出objective-c方法的?
文章作者
梵梵爸
上次更新
2021-04-14
许可协议
原创文章,如需转载请注明文章作者和出处。谢谢