智汇工业-智慧工业、智能制造及工业智能、工业互联门户网站,专业的工业“互联网+”传媒

深入理解iPhone靜態庫

來源:網絡

點擊:1215

A+ A-

所屬頻道:新聞中心

關鍵詞: iPhone,靜態庫

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

      iPhone官方只支持靜態庫聯編,本文就以靜態庫為例講解iPhone中靜態庫的具體用法。在實際的開發過程中,可能在項目設計階段把一些功能比如圖形界面引擎、網絡通訊引擎等都規劃到相應的函數庫中。

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

      #import 《Foundation/Foundation.h》

      @interface function : NSObject {

      }

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

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

      @end

      實現文件function.m內容如下:

      #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

      可見,筆者的這個靜態函數庫的功能很簡單,就是提供了兩個獲取最大值和最小值的函數。但是可能大多數現存的函數庫的源碼都是C或者C++格式的,沒關系,iPhone對C/C++支持的也很好。在Classes文件夾上點右鍵,選擇“New File…”,這次選擇Mac OS X下的“C and C++”,之后選擇“C File”并命名為“TestCFunction”,可以看到在Classes目錄下產生了兩個文件“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文件內保持為原樣。

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

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

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

      

      圖1

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

      

      圖2

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

      

      圖3

      點擊“Direct Dependencies”下方的“+”按鈕,會出現下圖:

      

      圖4

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

      ¨ 接下來使用靜態庫中的函數,修改頭文件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

      修改相應的實現文件如下:

      #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

      [window makeKeyAndVisible];

      }

      - (void)dealloc {

      [window release];

      [super dealloc];

      }

      @end

      編譯下,會發現項目無法編譯通過,錯誤信息如下:

      error: function.h: No such file or directory

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

      

      圖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

      有時候程序會出現如下錯誤信息:

      

      圖6

      這是因為在靜態庫里使用了Objective-C風格的源文件,需要在項目的“依賴關系信息項”里設置如下:

      

      圖7

      添加內容項為“-ObjC”。

    (審核編輯: 智匯小新)

    聲明:除特別說明之外,新聞內容及圖片均來自網絡及各大主流媒體。版權歸原作者所有。如認為內容侵權,請聯系我們刪除。

    主站蜘蛛池模板: 苏州交通设施_道路划线_停车场划线_厂区划线_环氧地坪厂家-推荐【飞扬市政交通设施公司】专注交通设施8年! | 注册会计师考试_CPA考试_注册会计师培训-北京注册会计师协会培训网 | 上海慧泰仪器制造有限公司 | 免费的PPT幻灯片演示制作软件,动画视频及课件制作软件 - Focusky万彩演示大师官网 | 液晶模组铁框_液晶显示压框-南皮县卓腾金属制品有限公司 | 联塑管代理,联塑管厂家批发,中财管总代理,康泰管代理,康泰管厂家批发-邯郸市中枢贸易有限公司 | 轻型防化服|重型防化服|全封闭防化服|济南三安安全防护设备有限公司 | 拉丝模|高晶异形拉丝模|联合拉拔机模具|钼丝拉丝模|金刚石纳米涂层模|焊丝拉丝模|钨钢拉丝模|聚晶拉丝模_河北恩泰利嘉金属制品有限公司 | 叛逆孩子改造,青少年行为矫正,戒网瘾学校,特训学校,全封闭军事化管理学校 | 抛丸机-通过式抛丸机-履带吊钩式抛丸机厂家-青岛泓霖智能设备公司 | 三亚酒吧KTV会所 专业舞台音响灯光 智能影音 会议音响工程 首选海南东演音响公司 | 消防巡检柜-EPS应急电源-交直流屏厂家-中央信号屏-万正电源 | 品牌T恤零售/批发厂商/供应商_男女式T恤生产/设计-圣达信T恤 | 无锡大然新风环保设备有限公司-办公室空气净化器_商用空气净化器_酒店空气净化器 | 华药药业集团|华药修医师|修医师浸膏|河南华药药业有限公司 | 氢能-燃料电池-电堆-中国氢能与燃料电池网企业最佳宣传推广平台 轻质隔墙板厂家-加气隔墙板_grc轻质隔墙板_空心实心复合隔墙板_水泥混凝土轻质隔墙板批发价格 | 湖南净声源环保科技有限公司是一家专业从事噪声治理和建筑声学设计生态环境综合治理服务的企业,专业从事株洲电梯隔音治理,湘潭中央空调降噪处理,衡阳邵阳冷却塔噪音治理,岳阳常德大型风机噪声隔音降噪,张家界空压机噪声治理,益阳配电房变压器噪声治理,专业郴州永州工厂企业车间噪声治理,怀化娄底专业机械设备减振降治理,武汉噪音治理隔音降噪公司,孝感噪音治理,立式球磨机的噪声控制,专业隔音降噪公司,、以及各类机械动力设备减振降噪噪声治理的公司,同时为客户提供咨询与解决方案 | 郑州空气能热水器,郑州空气能热水器经销商,郑州空气能热水器维修,郑州空气能热水器安装 | 舟舟宝贝少儿培训网-少儿艺术培训-少儿舞蹈培训-少儿英语培训 | 天津市力豹润滑科技有限公司 | 托普云农-数字农业综合服务商-官方网站 | 锯轨机|气动锯轨机|内燃锯轨机|电动钢轨钻孔机|内燃钢轨钻孔机-山东卓力铁路设备有限公司 | 移动石料破碎机-颚式锤式反击式破碎机设备厂家_山东.青州富康机械 | 威海实木家具-威海定制家具-威海家具-威海至佳百隆家具有限公司 威海木箱,威海木托盘,威海免熏蒸包装箱-威海耀晟木制品有限公司 | 郑州试驾场地_双超专业汽车试驾场地_郑州双超文化传播有限公司官方网站 | 轴流风机_混流风机_排烟防火阀-德州辰特空调设备有限公司 | 长沙网站建设,网站设计制作,长沙小程序开发,公众号开发,长沙叶老设计 | 江苏保捷锻压有限公司(中国汽车零部件供应商,锻造,精加工,热处理) | 绣花厂_电脑绣花厂_手工刺绣加工定制 - 北京丽绣坊工艺品有限公司 | 南京人才网_南京招聘网_南京人才市场最新招聘信息 | 天下机械|机床商讯-机械网|机械技术|机械信息|机床资讯|机床设备|机床商讯杂志 | 首页-青特集团官方网站 | 硫酸、硫酸铵、氯磺酸、氯化亚砜、硫酸钾、对位酯生产销售 - 河北和合化工有限公司 | 仪商网-专业测试仪器,测量仪表行业信息综合门户 | 中科盛世酒窖 - 酒窖设计_酒窖工程_酒窖空调设备_恒温酒柜定制_私人别墅家庭酒窖_不锈钢红酒柜_实木雪茄柜 | 西安西玛电机销售,西安西玛电机有限公司(原泰富西玛西安电机厂) 西安西雷脉冲功率技术有限公司-高压调制器/加速器与脉冲功率系统的研发/生产/应用推广/高压脉冲电源的应用研究/设计/生产和销售/高功率脉冲器件/材料与仪器设备的研发/生产和销售/高电压/大电流/强磁场环境的模拟及测试服务/会议会展服务/货物及进出口的业务/脉冲功率技术领域类的技术转让 西安网站建设,西安网站设计制作,西安短视频拍摄_短视频运营就选动力无限网络推广公司 | 宁波刑事辩护律师-建设工程律师-工程款合同律师-喻明辉律师 | 江苏保捷锻压有限公司(中国汽车零部件供应商,锻造,精加工,热处理) | 宁波雷豹机电科技有限公司|雷豹冷风机|雷豹工业大风扇|MFC18000|MFC16000|MFC6000|EF3622|EF4222|EF4822|移动工业蒸发式冷风机空气冷却器|大型工业空调扇|雷豹移动式工业大风扇|雷豹大风扇|生产厂家|公司官网 | 名嘉宴会【官网】_宁波冷餐_宁波茶歇_宁波酒会_宁波自助餐_宁波盛世名嘉宴会服务有限公司 | 威学一百-专注国际学校择校备考-DSE-A-level-雅思-托福-OSSD-港澳台联考-AP-IGCSE-IB-AMC-多邻国-PTE-SAT-SSAT-小语种(如日语,韩语,德语,法语,西班牙语,意大利语,俄语,泰语)等考试培训,为出国留学学生提供个性化定制性学习方案,线下实体面授+线上网络课程, 提供一对一,小班课等多种班型 |