设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

时间:2023-01-24 14:57:03

1 前言

  有时候,我们要将某一层服用给其他的团队,公司或者个人,由于某些原因,不能提供源码,这时候就可以将业务层和数据持久层编写成静态链接库(static li'brary或statically-linked library)。

  转载请注明出处:http://blog.csdn.net/developer_zhang

2 详述

  库是一些没有man函数的程序代码集合。出了静态库,还有动态链接库,他们之间的区别是:静态连接库可以编译到我们的执行代码中,应用程序可以在没有静态库的环境运行;动态链接库不能编译到我们的执行代码中,应用程序必须在有链接库文件的环境下运行。

  接下来我们就用上一篇博客的例子来学习一下如何制作和引入静态链接库,并且建立依赖关系。

2.1 构建可相互依赖的workSpace

  首先我们要先建立一个workSpace工作空间用来管理各个项目之间的依赖:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库  


简单来说,Workspace就是一个容器,在该容器中可以存放多个你创建的Xcode Project, 以及其他的项目中需要使用到的文件。

使用Workspace的好处有:
1)扩展项目的可视域,即可以在多个项目之间跳转,重构,一个项目可以使用另一个项目的输 出。Workspace会负责各个Project之间提供各种相互依赖的关系;
2)多个项目之间共享Build目录。

2.2 构建PersistenceLayer静态库

然后我们构建最基础的静态库也就是持久层的静态库PersistenceLayer:

在左侧空白处右键,新建Project:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

创建Cocoa Touch Static Library静态库:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

点击下一步创建:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

删除没有用的两个文件PersistenceLayer.h PersistenceLayer.m:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

把之前的项目的Note.h Note.m NoteDAO.h NoteDAO.m导入到项目之中:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

点击项目Targets-》Build Phases-》Editor:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

添加构建头Add Build Phases-》Add Copy Headers Build Phase:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

添加头文件:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

将两个头文件移动到Public中,使得外部Project可以访问得到:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

然后Build该Project即可生成一个新的.a静态库:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

2.3 构建BusinessLogicLayer

构建静态库的步骤同2.2,这里我们主要讲解一下业务层如何依赖持久层:

项目构建中添加libPersistenceLayer.a静态库:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

单击Add添加静态类库:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

在Targets-》Build Setting中搜索Search Path-》User Header Search Paths添加依赖项目的头文件的搜索路径$(BUILT_PRODUCTS_DIR),并且设置为recursive  

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

然后Build(构建)Targets为BusinessLogicLayer静态库:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

2.4 构建PresentationLayer

PresentationLayer不是静态连接工程,需要与BusinessLogicLayer建立关联,具体操作参照2.3。

这样我们就把三个Project依赖了起来,可以在表示层写一些测试代码:

ViewController.m:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NoteBL* noteBl = [[NoteBL alloc] init];
NSMutableArray* notes = [noteBl findAll];
NSLog(@"notes===>%@",notes);
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end


运行结果为:

2014-02-27 14:51:18.166 PresentationLayer[1409:a0b] notes===>(

    "<Note: 0x8e52f80>",

    "<Note: 0x8e51100>"

)

注意由于三个Project为分别依赖,所以Build的顺序应该是先PersistenceLayer然后BusinessLogicLayer最后编译运行PresentationLayer:

设计模式深入学习IOS版(9)工程依赖解耦之静态链接库

3 结语

  以上是所有内容,希望对大家有所帮助。

  代码实例:http://download.csdn.net/detail/u010013695/6969247