有時候,我們要將某一層服用給其他的團隊,公司或者個人,由於某些原因,不能提供源碼,這時候就可以將業務層和數據持久層編寫成靜態鏈接庫(static li'brary或statically-linked library)。
轉載請注明出處:http://blog.csdn.net/developer_zhang
庫是一些沒有man函數的程序代碼集合。出了靜態庫,還有動態鏈接庫,他們之間的區別是:靜態連接庫可以編譯到我們的執行代碼中,應用程序可以在沒有靜態庫的環境運行;動態鏈接庫不能編譯到我們的執行代碼中,應用程序必須在有鏈接庫文件的環境下運行。
接下來我們就用上一篇博客的例子來學習一下如何制作和引入靜態鏈接庫,並且建立依賴關系。
首先我們要先建立一個workSpace工作空間用來管理各個項目之間的依賴:
簡單來說,Workspace就是一個容器,在該容器中可以存放多個你創建的Xcode Project, 以及其他的項目中需要使用到的文件。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+yrnTw1dvcmtzcGFjZbXEusO0ptPQo7o8YnI+CjEpwKnVuc/uxL+1xL/JytPT8qOsvLS/ydLU1Nq24Lj2z+7Ev9auvOTM+Neqo6zW2Lm5o6zSu7j2z+7Ev7/J0tTKudPDwe3Su7j2z+7Ev7XEyuQgs/aho1dvcmtzcGFjZbvhuLrU8Lj3uPZQcm9qZWN01q685Mzhuam499bWz+C7pdLAwLW1xLnYz7U7PGJyPgoyKbbguPbP7sS/1q685Lmyz+1CdWlsZMS/wryhozxicj4KPC9wPgo8aDI+Mi4yILm5vahQZXJzaXN0ZW5jZUxheWVyvrLMrL/iPC9oMj4KPHA+yLu6887Sw8e5ub2o1+67+bShtcS+ssysv+LSsr7Nysez1r7DsuO1xL6yzKy/4lBlcnNpc3RlbmNlTGF5ZXKjujwvcD4KPHA+1NrX87Lgv9Ww17Sm09K8/KOs0MK9qFByb2plY3SjujwvcD4KPHA+PGltZyBzcmM9"/uploadfile/Collfiles/20140228/20140228083215257.jpg" width="700" height="600" alt="\">
創建Cocoa Touch Static Library靜態庫:
點擊下一步創建:
刪除沒有用的兩個文件PersistenceLayer.h PersistenceLayer.m:
把之前的項目的Note.h Note.m NoteDAO.h NoteDAO.m導入到項目之中:
點擊項目Targets-》Build Phases-》Editor:
添加構建頭Add Build Phases-》Add Copy Headers Build Phase:
添加頭文件:
將兩個頭文件移動到Public中,使得外部Project可以訪問得到:
然後Build該Project即可生成一個新的.a靜態庫:
構建靜態庫的步驟同2.2,這裡我們主要講解一下業務層如何依賴持久層:
項目構建中添加libPersistenceLayer.a靜態庫:
單擊Add添加靜態類庫:
在Targets-》Build Setting中搜索Search Path-》User Header Search Paths添加依賴項目的頭文件的搜索路徑$(BUILT_PRODUCTS_DIR),並且設置為recursive :
然後Build(構建)Targets為BusinessLogicLayer靜態庫:
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===>(
"
"
)
注意由於三個Project為分別依賴,所以Build的順序應該是先PersistenceLayer然後BusinessLogicLayer最後編譯運行PresentationLayer:
以上是所有內容,希望對大家有所幫助。
代碼實例:http://download.csdn.net/detail/u010013695/6969247