簡介:
? ? ? 庫是一些沒有main函數(shù)的程序代碼集合。除了靜態(tài)庫,還有動態(tài)鏈接庫,他們之間的區(qū)別是:靜態(tài)庫可以編譯到我們的執(zhí)行代碼中,應用程序可以在沒有靜態(tài)庫的環(huán)境中運行;動態(tài)庫不能編譯到我們的執(zhí)行代碼中,應用程序必須在有鏈接庫文件的環(huán)境下運行。
創(chuàng)建靜態(tài)庫的步驟如下所示,
1、創(chuàng)建DateTest,新建->Project,選擇cocoa Touch Static Library,如圖,

2、點擊Next,我將cocoa Touch Static Library項目名稱命名為DateTest,因為這是我用于處理時間和日期的靜態(tài)庫工程,

3、靜態(tài)庫文件功能的實現(xiàn)細節(jié)
創(chuàng)建了靜態(tài)庫DateTest項目之后,Xcode自動為我們創(chuàng)建了DateTest.h和DateTest.m文件,如下圖所示

4、在DateTest.h文件 中寫入
@interface DateTest : NSObject
- (NSString *)changeToStandardTime:(NSTimeInterval)timeInterval;
@end
5、在DateTest.m文件 中寫入
@implementation DateTest
- (NSString *)changeToStandardTime:(NSTimeInterval)timeInterval
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *time = [dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:timeInterval]];
return time;
}
@end
6、編譯項目,生成對應的靜態(tài)庫.a文件
6.1、先來看一下在模擬器上編譯(Command+B)之前的項目細節(jié),如下圖

這時候libDateTest.a文件變?yōu)楹谏珷顟B(tài)了,表明編譯過后它是一個真是存在于物理磁盤的文件,我們右鍵選擇Show in Finder,如下圖,出現(xiàn)了它的物理位置,


6.2、再看一下在真機上編譯(Command+B),過程同模擬器編譯基本一樣,不同的是在真機環(huán)境下進行編譯,如下圖

? ? ?上面的Debug-iPhones里面包含iPhone真機所需要的libDateTest.a靜態(tài)庫文件,而下面的Debug-iPhoneSimulator里面包含的時iPhone模擬器所需要的libDateTest.a靜態(tài)庫文件。
7、合并靜態(tài)庫
? ? ?針對真機和模擬器的靜態(tài)庫文件只能在一個平臺下面使用,好在我們可以將真機和模擬器上面的靜態(tài)庫文件合并成一個在真機和模擬器都可以使用的靜態(tài)庫文件,通過在終端輸入命令即可完成該目的。
打開終端輸入:lipo -create 將真機和模擬器的靜態(tài)庫文件拖進終端


最后輸入:- output /Users/用戶名/Desktop/libTimeDate.a
完整的命令是:
lipo -create /Users/admin/Library/Developer/Xcode/DerivedData/DateTest-anjnqehnhjobgbgzsoxyxagyjqib/Build/Products/Debug-iphoneos/libDateTest.a /Users/admin/Library/Developer/Xcode/DerivedData/DateTest-anjnqehnhjobgbgzsoxyxagyjqib/Build/Products/Debug-iphonesimulator/libDateTest.a -output /Users/admin/Desktop/libDateTest.a
這樣就在桌面生成了一個合并過后的libDateTest.a靜態(tài)庫文件,它可以再真機和模擬器上面同時使用。
8、使用靜態(tài)庫文件,
? ? ?這時候我們就可以使用自己創(chuàng)建、編譯生成的靜態(tài)庫文件了,將TimeDate.h文件和桌面上面的libTimeDate.a文件拖到想要使用的項目中,如下圖的目錄結構,

為了方便,在新建工程的AppDelegate中使用創(chuàng)建的靜態(tài)庫文件了,代碼如下,
AppDelegate.m文件中引入#import "DateTest.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
DateTest? *dateTime = [[DateTest alloc] init];
NSTimeInterval timeInterval = 1234567890;
NSString *time = [dateTime changeToStandardTime:timeInterval];
NSLog(@"time is -------%@",time);
// Override point for customization after application launch.
return YES;
}
? ? ?這時不管是真機還是模擬器都可以編譯通過,正常運行。而使用者只能通過頭文件知道我們提供的借口,卻不知道實現(xiàn)文件中實現(xiàn)的細節(jié),這有效地隱藏了自己的核心技術和機密內容。