iOS 静态类库项目的建立与使用

 

新建 Xcode workspace

打开 Xcode , 选择 File -> New -> Workspace , 将 Workspace 命名为 Test.xcworkspace , 并选择合适的目录。

新建 Static Library 项目

选择 File -> New -> Project , 项目模板选择 Cocoa Touch Static Library , 项目名称命名为 MyLib.xcodeproj , 注意选中 Use Automatic Reference Counting 。

Xcode 会在项目中自动生成 MyLib.h 和 MyLib.m 文件, 单击 MyLib.h 文件, 添加下面的两个方法定义:

1
2
- (NSInteger) add:(NSInteger)a and:(NSInteger)b;
+ (NSString*) connect:(NSString*)str1 and:(NSString*)str2;

再打开 MyLib.m 文件, 添加刚刚定义两个文件的实现:

- (NSInteger) add:(NSInteger)a and:(NSInteger)b {
return a + b;
} + (NSString*) connect:(NSString *)str1 and:(NSString *)str2 {
return [NSString stringWithFormat:@"%@ %@", str1, str2];
}

现在, 最终的文件看起来是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//
// MyLib.h
// MyLib
//
// Created by gdeic on 4/16/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
  
#import <FOUNDATION foundation.h>
  
@interface MyLib : NSObject
  
- (NSInteger) add:(NSInteger)a and:(NSInteger)b;
  
+ (NSString*) connect:(NSString*)str1 and:(NSString*)str2;
  
@end
  
//
// MyLib.m
// MyLib
//
// Created by gdeic on 4/16/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
  
#import "MyLib.h"
  
@implementation MyLib
  
- (NSInteger) add:(NSInteger)a and:(NSInteger)b {
   return a + b;
}
  
+ (NSString*) connect:(NSString *)str1 and:(NSString *)str2 {
   return [NSString stringWithFormat:@"%@ %@", str1, str2];
}
@end

选中 MyLib 项目, 在中间的编辑器窗口中选择项目的 Target , 选择 Build Phases 标签, 展开 Copy Headers 分组, 下面有三个子分组, 分别是 Public 、 Project 与 Private , 将 MyLib.h 拖拽到 Public 分组即可。

保存所有文件, 选择 Product -> Build , 进行编译, 生成 libMyLib.a 文件, 同时也会将 MyLib.h 文件复制到输出目录。

使用静态类库项目

选择 File -> New -> Project , 项目模板选择 iOS -> Application -> Single View Application , 项目名称命名为 MyApp , 注意勾选 Use Storyboards 和 Use Automatic Reference Counting 。

建好项目之后, 项目窗口如下如所示:

将 MyLib 项目拖拽到 MyApp 项目的 Frameworks 文件夹, 在弹出的对话框中选择 Create groups for any added folders , 然后点击 Finish 按钮。

选中 MyApp 项目, 在选择项目的目标 (Target) , 选中 Summary 标签页下找到 Linked Frameworks and Library 分组选项, 如下图:

点击下面的加号按钮, 将工作区的 libMyLib.a 添加进去。

接下来添加头文件搜索目录, 选中 Targets 上面的 Project , 选择 Build Settings 标签页,在搜索框内输入 header search 进行过滤, 找到 Header Search Paths , 添加一行, 输入 ../MyLib , 并选中递归复选框。

现在要先验证一下对 MyLib 的引用是否正确, 打开 MyApp 项目的 ViewController.m , 添加对 MyLib.h 的引用, 如下图所示, 并编译 MyApp , 如果编译成功, 则表示引用正确。

打开 MainStoryboard.storyboard 文件, 在生成的 ViewController 上添加两个 UITextField 、 两个 UIButton 以及一个 UILabel, 如下图所示:

并添加相应的 outlet 和 action , ViewController.h 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//
// ViewController.h
// MyApp
//
// Created by gdeic on 4/19/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
  
#import <UIKIT uikit.h>
  
@interface ViewController : UIViewController
  
@property (weak, nonatomic) IBOutlet UITextField *textField1;
  
@property (weak, nonatomic) IBOutlet UITextField *textField2;
  
@property (weak, nonatomic) IBOutlet UILabel *resultLabel;
  
- (IBAction)addButtonClick:(id)sender;
  
- (IBAction)connectButtonClick:(id)sender;
  
@end

打开 ViewController.m 文件, 实现 addButtonClick: 和 connectButtonClick: 方法, 在 addButtonClick: 方法中调用 MyLib 的实例方法 add:and: , 在 connectButtonClick: 方法中调用 MyLib 的静态方法 connect:and: , 如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- (IBAction)addButtonClick:(id)sender {
   // 获取用户输入的两个数字
   NSInteger num1 = [self.textField1.text integerValue];
   NSInteger num2 = [self.textField2.text integerValue];
   // 初始化一个新的 MyLib 实例
   MyLib* myLib = [[MyLib alloc] init];
   // 调用实例方法相加
   NSInteger result = [myLib add:num1 and:num2];
   // 显示结果
   self.resultLabel.text = [NSString stringWithFormat:@"%d + %d = %d", num1, num2,result];
}
  
- (IBAction)connectButtonClick:(id)sender {
   // 获取用户输入的两个字符串
   NSString* str1 = self.textField1.text;
   NSString* str2 = self.textField2.text;
   // 调用 MyLib 的静态方法连两个字符串
   NSString* result = [MyLib connect:str1 and:str2];
   // 显示结果
   self.resultLabel.text = result;
}

点击添加按钮时, 效果如下图所示:

点击 Connect 按钮时, 效果如下图所示:

张志敏所有文章遵循创作共用版权协议,要求署名、非商业 、保持一致。在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。

iOS 静态类库项目的建立与使用的更多相关文章

  1. iOS 静态类库 打包 C,C++文件及和OC混编

    iOS 静态类库 编译 C,C++ 我们都知道,OC 原生支持C, 在 创建的 OC类的 .m 里面,可以直接编写C的代码: 同样 Xcode 也支持 OC ,C++的混编,此时,我们通常把OC创建的 ...

  2. iOS 打包静态类库 lib.a

    iOS 打包静态类库 lib.a 流程 1: xcode---新建项目---iOS-framework&Library-----Cocoa touch Static Library----Ne ...

  3. iOS静态库小结--(yoowei)

    准备知识: 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.根据源代码的公开情况,库可以分为2种类型 a.开源库 公开源代码,能看到具体实现 ,比如SDWebImage.AFNetw ...

  4. iOS 静态库和动态库的区别&静态库的生成

    linux中静态库和动态库的区别 一.不同 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 1. 静态函数库 这类库的名字一般是libxxx.a:利用静态函 ...

  5. Method Swizzle黑魔法,修改 ios 系统类库方法 SEL IMP

    Method Swizzle黑魔法,修改 ios 系统类库方法   版权声明:本文为博主原创文章,未经博主允许不得转载. 一般来说,系统提供的方法已经足够开发了,但是有的时候有些需求用普通方法不好做. ...

  6. iOS 静态库,动态库与 Framework 浅析

    静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人 ...

  7. iOS静态库.a总结(2017.1.24增加脚本打包方法)

    修改于:2017.1.24 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.根据源代码的公开情况,库可以分为2种类型 a.开源库 公开源代码,能看到具体实现 ,比如SDWebImag ...

  8. iOS - 静态库的创建与使用

    在日常项目开发中,不论是为了两个公司项目上的业务交流还是为了减少项目的编译时间,有的时候我们会把项目中的私密内容打包成静态库,或者是把项目中变动较少一部分打包成静态库以便提高编译效率,那么下面我们就来 ...

  9. ios 静态库冲突的解决办法

    最近在做一个 iOS 的 cocos2d-x 项目接入新浪微博 SDK 的时候被“坑”了,最后终于顺利的解决了.发现网上也有不少人遇到一样的问题,但是能找到的数量有限的解决办法写得都不详细,很难让人理 ...

随机推荐

  1. ?--Porg.springframework.beans.MethodInvocationException: Property 'username' threw exception; nested exception is java.lang.NullPointerException

    使用BoneCP作为连接池,在启动Tomcat报出以下异常: 一月 02, 2016 2:12:17 下午 org.apache.tomcat.util.digester.SetPropertiesR ...

  2. SQL SERVER时间函数

    本篇文章还是学习<程序员的SQL金典>内容的记录,此次将讲解的是SQL SERVER的时间函数. 本文只讲SQL SERVER支持的时间函数(其它数据库这里就不罗列了,想看更多的可以关注& ...

  3. 【HDOJ】【3709】Balanced Bumber

    数位DP 题解:http://www.cnblogs.com/algorithms/archive/2012/09/02/2667637.html dfs的地方没太看懂……(也就那里是重点吧喂!)挖个 ...

  4. 前端学习笔记汇总(之merge方法)

    学习笔记 关于Jquery的merge方法 话不多说,先上图 使用jquery时,其智能提示如上,大概意思就是合并first和second两个数组,得到的结果是first+(second去重后的结果) ...

  5. android2.3 -添加自定义按键:作唤醒功能 .

    最近需要做个唤醒功能,当按键的时候android系统唤醒并点亮屏,在长按键中,系统不能在进入睡眠. 驱动方面: 1:在平台设备文件中添加 一个按键,定义为唤醒源! \arch\arm\mach-s5p ...

  6. 让IE系列浏览器支持HTML5(share)

    引用Google的html5.js文件 <!--[if IE]> <script src=”http://html5shiv.googlecode.com/svn/trunk/htm ...

  7. IP地址总结

    1.网际协议IP : 网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一.与 IP 协议配套使用的还有四个协议: 地址解析协议 ARP (Address Resolution Protoco ...

  8. Thread的第五天学习

    1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如:卖票系统就可以这么做! package com.thread.demo; publi ...

  9. Tomcat部署Web应用方法总结

    转载:http://m.blog.csdn.net/blog/u012516903/15741727 Tomcat部署Web应用方法总结 在Tomcat中部署Java Web应用程序有两种方式:静态部 ...

  10. python os.stat() 和 stat模块详解

    stat 系统调用时用来返回相关文件的系统状态信息的. 首先我们看一下stat中有哪些属性: >>> import os >>> print os.stat(&qu ...