• iOS开发之静态库(二)—— .a


    前面已经介绍了iOS中静态库的基本概念和特点,这里就不再多废话,直接上代码

    编译环境Xcode5.1 + Mac OS X 10.9.3

    新建静态库项目

    Xcode中创建静态库的模板有两个,一个是创建iOS静态库,另一个是创建Mac OS X静态库,我们选择前者

    点击右下角Next按钮进入下一步

    给工程起个名字MyToolsA,其余的按默认值

    点击Next下一步

    我们所关心的就只有MyToolsA.h和MyToolsAm文件,其他的暂且不管

    //  MyToolsA.h
    //  MyToolsA
    //
    //  Created by LZH on 14-8-14.
    //  Copyright (c) 2014年 LZH. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface MyToolsA : NSObject
    
    - (int)add: (int)x Second: (int)y; //对象方法
    + (int)sub: (int)x Second: (int)y; //类方法
    
    @end
    //  MyToolsA.m
    //  MyToolsA
    //
    //  Created by LZH on 14-8-14.
    //  Copyright (c) 2014年 LZH. All rights reserved.
    //
    
    #import "MyToolsA.h"
    
    @implementation MyToolsA
    
    - (int)add: (int)x Second: (int)y{
    
        return x + y;
    }
    
    + (int)sub: (int)x Second: (int)y{
        
        return x - y;
    }
    
    @end

    代码完成后开始编译

    编译之前需要先配置工程,因为默认情况是生成Debug版本,如果需要生成Release版本就需要重新配置

    Xcode->Product->Scheme->Edit Scheme... 或者直接按快捷键"Shift + Command + 逗号"弹出配置面板

    将Debug选项改为Release选项

    将编译目标改为iOS Device ,表示编译生成的是真机版本的静态库

    点击左上角红框内的三角按钮或者快捷键"Command + b"进行编译,当看到“Build Succeeded”表明编译成功

    然后便可以看到Products目录下的libMyToolsA.a由红色变成了黑色,说明我们已经成功生成了静态库文件

    右键点击libMyToolsA.a选择"Show in Finder"

    找到libMyToolsA.a所在文件夹

    切换编译目标,将iOS Device 改为 iPhone Retina (3.5-inch),编译生成适用于模拟器的静态库

    OK,现在真机版本的静态库和模拟器版本的静态库都已经生成,下面的工作是要将二者合并,生成一个既适用于真机又适用于模拟器的静态库

    需要使用下面的命令

    lipo -create 1.a 2.a -output 12.a

    打开终端,为了方便期间,直接切换到超级用户

    找到静态库所在目录

    弹出属性菜单,在“位置”属性中记录的便是该目录所在的绝对路径,复制粘贴到终端窗口,即可进入指定文件夹

    然后使用lipo命令合成静态库

    我们来验证一下生成的库是否支持我们想要的平台

    可以看出,我们最终生成的库libMyToolsA.a同时支持32位模拟器架构i386、64位模拟器架构x86_64、32位真机架构armv7/armv7s及64位真机架构arm64

    跟我们的预期相吻合。

    下面便是测试工程

    此处选择iOS工程的单视图模板

    右键点击"New Group"新建组"MyTools",将刚刚生成的库文件libMyToolsA.a和头文件MyToolsA.h拖动至MyTools下

    注意:

    拖动时同时按住Alt键,这样就是复制而不是移动,原来的文件都还在,否则就会把原位置的文件删除了

    由于.a静态库的使用必须由头文件配合,所以也要把.h文件拷贝过来

    必须勾选上Add to targets 下的StaticLibATest目标,否则即使把文件放进来编译目标时也无法使用

    要使用刚刚导入的静态库,只需要加入其头文件即可

    修改ViewController.m文件

    //  ViewController.m
    //  MyToolsATest
    //
    //  Created by LZH on 14-8-15.
    //  Copyright (c) 2014年 LZH. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "MyToolsA.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    	// Do any additional setup after loading the view, typically from a nib.
        
        int x = 10, y = 7;
        
        //使用类方法
        NSLog(@"%d - %d = %d", x, y, [MyToolsA sub: x Second: y]);
        
        //使用对象方法
        MyToolsA *myToolsA = [[MyToolsA alloc] init];
        
        NSLog(@"%d + %d = %d", x, y, [myToolsA add: x Second: y]);
        
        
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    
    @end

    运行结果:

    模拟器

    真机

     

    OK,大功告成,输出结果跟我们预期的完全一样。

       

     

  • 相关阅读:
    Powerdesigner中如何生成测试数据
    iBatis #和$的区别 把int作为参数时,转换为字符型
    config或者xml中的embedded使用方法。
    C#中发送邮件
    ASP.NET中JSON的序列化和反序列化
    AspNetPager.dll 实现分页
    oracle创建表空间
    如何进行数据库,比如ORACLE,SQL SERVER的逆向工程,将数据库导入到PD中
    DataTable转换成JSON字符串的函数
    iBatis把一个表的sqlmap配置的多个xml中。
  • 原文地址:https://www.cnblogs.com/mylizh/p/3971448.html
Copyright © 2020-2023  润新知