三级黄色在线视频中文,国产精品一二三区,在线观看三级,成人午夜久久,日韩国产一区二区,韩日免费av,日韩成人一级

深入理解iPhone靜態(tài)庫

來源:網(wǎng)絡(luò)

點擊:1194

A+ A-

所屬頻道:新聞中心

關(guān)鍵詞: iPhone,靜態(tài)庫

      在實際的編程過程中,通常會把一些公用函數(shù)制成函數(shù)庫,供其它程序使用,一則提搞了代碼的復用;二則提搞了核心技術(shù)的保密程度。所以在實際的項目開發(fā)中,經(jīng)常會使用到函數(shù)庫,函數(shù)庫分為靜態(tài)庫和動態(tài)庫兩種。和多數(shù)人所熟悉的動態(tài)語言和靜態(tài)語言一樣,這里的所謂靜態(tài)和動態(tài)是相對編譯期和運行期的:靜態(tài)庫在程序編譯時會被鏈接到目標代碼中,程序運行時將不再需要改靜態(tài)庫;而動態(tài)庫在程序編譯時并不會被鏈接到目標代碼中,只是在程序運行時才被載入,因為在程序運行期間還需要動態(tài)庫的存在。

      iPhone官方只支持靜態(tài)庫聯(lián)編,本文就以靜態(tài)庫為例講解iPhone中靜態(tài)庫的具體用法。在實際的開發(fā)過程中,可能在項目設(shè)計階段把一些功能比如圖形界面引擎、網(wǎng)絡(luò)通訊引擎等都規(guī)劃到相應(yīng)的函數(shù)庫中。

      打開XCode新建一個項目,選擇Library下的“Cocoa Touch Static Library”并命名為“FirstLibrary”。這個新建的靜態(tài)庫項目下除了“FisrtLibrary_Prefix.pch”外沒有任何程序文件,在Classes文件夾上點右鍵選擇“New File…”,然后在“Cocoa Touch Class”下選擇“Objective-C class”,筆者在這里先創(chuàng)建Objective-C風格的源文件和頭文件并命名為“function”,可以看到在Classes目錄下產(chǎn)生了function.h和function.m文件。接著在頭文件里輸入以下內(nèi)容:

      #import 《Foundation/Foundation.h》

      @interface function : NSObject {

      }

      - (int)getMax:(int)a b:(int)b;

      - (int)getMin:(int)a b:(int)b;

      @end

      實現(xiàn)文件function.m內(nèi)容如下:

      #import “function.h”

      @implementation function

      - (int)getMax:(int)a b:(int)b

      {

      return a 》 a?a:b;

      }

      - (int)getMin:(int)a b:(int)b

      {

      return a 《 b?a:b;

      }

      @end

      可見,筆者的這個靜態(tài)函數(shù)庫的功能很簡單,就是提供了兩個獲取最大值和最小值的函數(shù)。但是可能大多數(shù)現(xiàn)存的函數(shù)庫的源碼都是C或者C++格式的,沒關(guān)系,iPhone對C/C++支持的也很好。在Classes文件夾上點右鍵,選擇“New File…”,這次選擇Mac OS X下的“C and C++”,之后選擇“C File”并命名為“TestCFunction”,可以看到在Classes目錄下產(chǎn)生了兩個文件“TestCFunction.h”和“TestCFunction.c”,TestCFunction.h如下:

      #ifndef TestCFunction_H_

      #define TestCFunction_H_

      void swapValue(int* a,int* b)

      {

      int temp = 0;

      temp = *a;

      *a = *b;

      *b = temp;

      }

      #endif

      TestCFunction.c文件內(nèi)保持為原樣。

      至此,這個靜態(tài)函數(shù)庫已經(jīng)編寫完畢,盡管很簡單,但是包含了Objective-C風格和C風格的源代碼文件在內(nèi),編譯這個程序會看到在Products目錄下產(chǎn)生了名為“libFirstLibrary.a”的靜態(tài)庫文件。

      新建一個“Window-based Application”項目并命名為“FirstLibraryTest”,下面筆者會演示如何在這個新項目里利用前面生成的靜態(tài)庫libFristLibrary.a文件。

      ¨ 首先,拖拉靜態(tài)庫里的“FirstLibrary.xcodeproj”文件到新項目的Frameworks目錄下(當然也可以通過右鍵點Frameworks-》Add-》Existing Files.。添加),如下圖:

      

      圖1

      ¨ 然后選擇“FristLibrary.xcodeproj”文件,選擇右邊編輯窗口中的最后一項,這樣就將靜態(tài)庫添加到項目中了,如下圖:

      

      圖2

      ¨ 在將靜態(tài)庫添加到項目中后,需要在項目和靜態(tài)庫之間建立“Direct Dependencies(所謂的依賴關(guān)系)”。在“Targets”目錄下選擇“FirstLibraryTest”,然后快捷鍵Cmd+i(或者右鍵選擇Get Info)可以看到項目的依賴信息,如下圖:

      

      圖3

      點擊“Direct Dependencies”下方的“+”按鈕,會出現(xiàn)下圖:

      

      圖4

      選擇“FirstLibrary”并點擊“Add Target”,這樣就建立了項目和靜態(tài)庫之間的“依賴關(guān)系”,在項目編譯階段,程序會到靜態(tài)庫中查找相應(yīng)的目標文件。

      ¨ 接下來使用靜態(tài)庫中的函數(shù),修改頭文件FirstLibraryTestAppDelegate.h如下:

      #import 《UIKit/UIKit.h》

      #import “function.h”

      #include “TestCFunction.h”

      @interface FirstLibraryTestAppDelegate : NSObject 《UIApplicationDelegate》 {

      UIWindow *window;

      function* iFunc;

      }

      @property (nonatomic, retain) IBOutlet UIWindow *window;

      @end

      修改相應(yīng)的實現(xiàn)文件如下:

      #import “FirstLibraryTestAppDelegate.h”

      @implementation FirstLibraryTestAppDelegate

      @synthesize window;

      - (void)applicationDidFinishLaunching:(UIApplication *)application {

      iFunc = [[function alloc] init];

      int a = 3,b = 6;

      int max = 0,min = 0;

      max = [iFunc getMax:a b:b];

      min = [iFunc getMin:a b:b];

      NSLog(@“max = %d,min = %d”,max,min);

      int c = 8,d = 22;

      swapValue(&c, &d);

      NSLog(@“after swapValue c = %d,d = %d”,c,d);

      // Override point for customization after application launch

     ?。踳indow makeKeyAndVisible];

      }

      - (void)dealloc {

     ?。踳indow release];

     ?。踫uper dealloc];

      }

      @end

      編譯下,會發(fā)現(xiàn)項目無法編譯通過,錯誤信息如下:

      error: function.h: No such file or directory

      就是說,項目無法找到相應(yīng)的靜態(tài)庫的頭文件,從而也就無法在項目和靜態(tài)庫之間建立“依賴關(guān)系”,所以需要在項目的“依賴信息選項”里告訴項目它所依賴的靜態(tài)庫頭文件的位置信息,如下圖設(shè)置靜態(tài)庫頭文件的位置信息:

      

      圖5

      最后再編譯一下,順利通過,輸出信息如下:

      [Session started at 2009-11-20 10:52:22 +0800.]

      2009-11-20 10:52:23.805 FirstLibraryTest[768:207] max = 6,min = 3

      2009-11-20 10:52:23.807 FirstLibraryTest[768:207] after swapValue c = 22,d = 8

      有時候程序會出現(xiàn)如下錯誤信息:

      

      圖6

      這是因為在靜態(tài)庫里使用了Objective-C風格的源文件,需要在項目的“依賴關(guān)系信息項”里設(shè)置如下:

      

      圖7

      添加內(nèi)容項為“-ObjC”。

    (審核編輯: 智匯小新)

    聲明:除特別說明之外,新聞內(nèi)容及圖片均來自網(wǎng)絡(luò)及各大主流媒體。版權(quán)歸原作者所有。如認為內(nèi)容侵權(quán),請聯(lián)系我們刪除。