你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS靜態庫的制作

iOS靜態庫的制作

編輯:IOS開發綜合

庫可以分為靜態庫和動態庫,靜態有.a和.framework,動態庫有.framework、.dylib(iOS9之前)、.tbd(iOS9之後)。

相信很多朋友在做項目過程中,都會需要在工程中導入庫,那麼這個庫又是怎麼生成的呢,今天我們就開看一下一個靜態庫它的制作流程:

這裡假設我們要制作一個異步加載網絡圖片的庫(工程名:BHImage),首先我們要新建一個工程,注意要選擇這個:

\

創建成功之後,打開左側Products文件夾,我們會發現我們的庫是紅色的,它表示該庫還沒有生成

\

工程會默認是動態庫(Dynamic Library),我們需要將它改為靜態庫(Static Library)才行:

選擇TARGETS-->Build Settings搜索到Mach-O Type進行更改:

\

現在我們要新建一個UIImageView的類目(LoadImageURL)

\\

然後你就會發現工程出錯了,那是因為我們沒有導入UIKit的原因,在類目的.m文件中導入#import 之後就沒錯了

然後我們要在BHImage.h中導入我們的類目(注意導入方式):

 

#import 

 

現在我們就要為UIImageView擴展方法了:

 

#import 

.h文件中
@interface UIImageView (LoadImageURL)

//根據URL加載資源
- (void)bh_setImageURL:(NSURL *)url;

@end
在.m中實現:
#import "UIImageView+LoadImageURL.h"

@implementation UIImageView (LoadImageURL)

- (void)bh_setImageURL:(NSURL *)url{
    //獲取全局隊列
    dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    //獲取主隊列
    dispatch_queue_t mainQueue = dispatch_get_main_queue();
    
    //異步加載網絡資源
    dispatch_async(globalQueue, ^{
        //根據URL獲取到圖片的Data
        NSData *data = [NSData dataWithContentsOfURL:url];
        //Data->UIImage
        UIImage *image = [UIImage imageWithData:data];
        //主線程更新UI
        dispatch_sync(mainQueue, ^{
            self.image = image;
        });
    });
}
@end

到這裡,我們的代碼就寫完了

Debug版的靜態庫生成:

任意選擇一個模擬器運行程序,你就會發現庫變成黑色的了,那就表示庫(模擬器庫:只在模擬器上可用)已經生成了,點擊該庫到finder中查看:

\

模擬器庫並不能滿足我們的需求,現在我們就要生成一個真機庫了:

選中運行狀態為:\運行就會生成一個真機庫了,再次查看:

\

Release版的靜態庫生成:

點擊Product-->Scheme-->EditScheme,選擇

\

跟上面操作一樣,先選擇任意模擬器運行,再切換Generic iOS Device運行,在次查看可發現:

\

就這樣,還不能滿足我們的需要,我們要讓我們的靜態庫既可以在真機上可用還可以在模擬器上可用,那麼我們現在要做的就是生成一個Release版(包含真機、模擬器)的靜態庫了:

新建一個文件夾(用於裝我們新建的靜態庫),打開終端輸入命令:

lipo -create 真機版HBImage 模擬器版HBImage -output 新建的文件夾/名字BHImage\

操作示例:

\

回車之後,打開我們的新建文件夾,會發現新的BHImage文件已經生成了,就這樣子它肯定是不能用的,只有庫才可以用嘛,我們需要將它替換到真機庫的BHImage中去:

將真機Release版中的庫拷貝到新建的文件夾,刪除其中的BHImage,然後將我們剛生成的BHImage拖入到其中,然後我們的靜態庫到這裡也制作完成了(真機、模擬器均可用),是不是感覺很簡單呀。。

\

現在我們就來用一用我們制作的靜態庫吧:

將我們手動集成的三方庫導入到工程,設置:

選擇TARGETS-->Build Settings搜索到Other Linking Flags點擊添加-Objc:

\

導入頭文件到需要使用的類中,調庫中提供的方法:

 

#import 
//根據URL 獲取圖片
- (void)loadImage
{
    for (int i = 0; i < self.datasource.count; i++) {
        UIImageView *imageV = self.imageStore[i];
        NSString *urlStr = self.datasource[i];
        NSURL *url = [NSURL URLWithString:urlStr];
        
        //******使用靜態庫方法
        [imageV bh_setImageURL:url];
    }
}
運行程序,使用我們自己制作的靜態庫來異步加載圖片的成果就出來了:

\

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved