在iOS的项目开发中,项目会随着时间不断变大,项目的结构会变得越来越复杂,编译速度也越来越慢,这时,就需要对项目进行优化。而对于项目结构优化的一种方式,就是使用动态库或静态库来优化项目的结构。
使用动态库(静态库)对项目进行优化,可以是在项目中创建子项目,也可以创建并列的项目,然后建立项目依赖。
现在,我们首先学习项目中创建子工程,对项目结构进行优化。
1、创建一个项目母工程
首先,创建一个项目母工程,我们命名为ProjectDemo。
2、创建项目子工程——动态库
使用xcode再次创建一个新工程,选择动态库文件进行创建。命名为LoginLib。
注意:在创建的时候,要将该动态库工程添加进我们上一步创建的母工程里面。
创建完成之后,项目的结构层次应该是下图所示的样式:
3、创建动态库中的内容文件、image.bundle以及PCH文件
LoginLib登录???,主要有登录、注册、忘记密码以及弹出框几个文件。
PCH文件主要定义一些颜色、宏定义等等。这里面我主要定义了动态库的bundle和图片的路径。具体PCH文件如何创建使用,参考我的另一篇文章《iOS PCH文件的添加和使用》。
// 该动态库的bundle
#define loginBundle [NSBundle bundleWithIdentifier:@"com.fifedu.LoginLib"]
// 该动态库里面图片的路径
#define imagePath(imgName) [[loginBundle resourcePath] stringByAppendingPathComponent:[@"image.bundle" stringByAppendingPathComponent:imgName]]
image.bundle文件主要用于存放需要用到的图片以及其他资源文件。
image.bundle的创建:新建文件,选择“Resource”下的“settingsBundle”文件。删除里面无用的配置文件即可。
4、内容文件加载xib文件问题
平时,我们加载xib默认是加载mainBundle里面的xib,而动态库里面的xib加载便不能使用mainBundle了,要指定加载哪个bundle里面的xib文件了。
在动态库中每一个需要加载xib文件的.m文件里加上一段代码:
- (instancetype)init {
self = [super initWithNibName:@"FiFLoginController" bundle:loginBundle];
if (self) {
return self;
}
return self;
}
图片的使用也是需要指定图片所在的bundle才可以。
// 可以查看PCH文件中的宏定义
self.imgView.image = [UIImage imageWithContentsOfFile:imagePath(@"否认三连.jpg")];
而xib文件中的图片要加上图片的相对路径才可以
5、动态库的配置
TARGETS -Build Settings - Build Active Architchture Only 设置为No
TARGETS->Build Settings->Other Linker Flags,添加 -ObjC
TARGETS->Build Settings->Enable Bitcode 设置为No
Edit scheme-Run-Build Configuration设置为Release
设置公开头文件和资源文件:
并且在LoginLib.h文件中加入需要公开的头文件
6、母项目中引用动态库文件
7、母项目使用动态库类
引入头文件,直接使用即可