iOS之学习系统提供的框架(库)和自己制作框架

来源:互联网 发布:余文乐的潮牌淘宝店铺 编辑:程序博客网 时间:2024/04/29 16:17

一.基础知识

1.库是程序代码的集合,是共享程序代码的一种方式

2.根据源代码的公开情况,库可以分为两种类型:

  • 开源库:能看到具体实现,比如:SDWebImageAFNetworking
  • 闭源库:不公开源代码,是经过编译后的二进制文件,看不到具体实现,分为两种:静态库动态库

3.静态库和动态库
静态库:.a.framework
动态库:.dylib.framework

4.添加库的步骤:
“选中工程”—–>”General”—–>”Linked Frameworks and Libraries”

5.静态库和动态库在使用上的区别:

  • 静态库:链接时,静态库会被完整地复制到可执行文件(即App程序),被多次使用就有多份冗余拷贝;
  • 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序应用,节省内存(项目中如果使用了自制的动态库,不能被上传到AppStore)

二.如何学习系统的框架(例如UIKit框架)
UIKit框架为例,按照上述方法将UIKit框架添加到工程下,并将框架展开:

这样,我们就可以查看框架中的头文件了,系统会将类和方法暴露在头文件中。

三.关于系统架构的知识:

模拟器:

  • i386:3gs –> iPhone5
  • x86_64:5s –> 6Plus

真机:

  • armv7:iPhone 3gs –> 4s
  • armv7s:iPhone 5 –> 5c
  • arm64:iPhone 5s –> 6Plus

四.制作我们自己的静态库<1>.a

  • 命令lipo -info 静态库可以查看该”静态库”支持哪些架构
  • 命令lipo -create 静态库1 静态库2 -output 静态库3可以将”静态库1”和”静态库2”合并

步骤:
1.新建”Cocoa Touch Static Library”项目,命名为SStool:

创建好后,效果如下:

可以看出,系统为我们创建了两个文件:SStool.hSStool.m也要注意:此时Products目录下的libSStool.a文件是红色的。

2.为了使我们创建的静态库同时支持系统的几种架构,如下设置:
“选择工程”–>”Build Settings”–>”Architecture”–>”将Build Active Architecture Only设置为No”

3.删除系统为我们创建的文件,即SStool.hSStool.m,新建一个类SSsum类:

#import <Foundation/Foundation.h>@interface SSsum : NSObject//the function is to calculate the sum of numbers+(NSInteger)sumNum1:(NSInteger)num1 num2:(NSInteger)num2;@end
#import "SSsum.h"@implementation SSsum+(NSInteger)sumNum1:(NSInteger)num1 num2:(NSInteger)num2{    return num1+num2;}@end

假设以上就是我们的库所有的文件。

4.为了让我们的库能够让别人使用,我们需要暴露我们的头文件:SSsum.h,为了实现这个目的,步骤:”选中工程”–>”Build Phases”–>”Copy Files”–>”将我们要暴露的头文件添加”

5.编译我们的库文件:”Command+B”,需要注意的是:我们既要在模拟器上编译,也要在”IOS Device”状态下编译,编译后如下:

此时,发现libSStool颜色变黑了。

6.检查我们制作的库文件:”选中libSStool”–>”show in Finder”


使用lipo info-查看我们的库文件:

可以看出,完全支持系统的几种架构。

7.使用我们制作的库文件:
“将创建好的库文件拖入新创建的工程中”–>”导入头文件SSsum.h”

五.如何在开发中调试静态库

1.创建一个项目,项目面板如下:

2.在刚刚创建的项目中创建"Cocoa Touch Static Library":点击中间面板左下角的”+”符号创建。

创建好后,文件面板的效果如下:

可以看出,有四处不同之处,已用红色箭头标出。

3.调试创建的库:首先将我们创建的库添加到工程中(选中工程,而不是静态库,”General”—>”Linked Frameworks And Libraries”)


然后在视图控制器中导入头文件引用即可

六.制作静态库时有图片等资源时:需要将资源单独加载,即将资源拖到使用静态库的工程中。问题是:静态库需要的资源可能会与工程中的资源名称相同,解决方法是:制作静态库所需要的资源放在Bundle里面。

制作Bundle文件:新建一个文件夹,扩展名为.bundle即可,”右键”–>”显示包内容”–>”往里面添加资源即可”

七.制作我们自己的静态库<2>.framework

步骤:
1.创建一个”Cocoa Touch Framework”工程:

2.新建一个类SSlog,里面包含我们需要的功能。

3.设置开放的头文件: Framework中有些类可能是一些私有的辅助工具,不需要使用者看到,在这里只需要把开放出去的类放到Public下:

这样生成的Framework的Headers目录下也只能看到Public的头文件

4.设置静态库:将”Build Settings”—>”Linking”–>”Mach-o Type”,设置为”Static Library”

如果没有这步的,默认是动态库

0 0
原创粉丝点击