IOS培训
美国上市IOS培训机构

400-111-8989

热门课程

IOS库开发知识点总结和归纳

  • 发布:点点点
  • 来源:IOS开发教程
  • 时间:2018-07-26 16:42

IOS库开发总结归纳

1.基本用法

定义类,导出头文件,注意头文件,库文件的search path

2.加载资源

- 使用主工程的文件,耦合性太强

- 封装到NSBundle中 NSBundle可以封装xib storyboard assets

对于png文件bundle 对于 不同scale的png文件会默认合并成tiff文件,如果不想这样可以把bundle的build settings里面的 combine_hidpi_images 设置为NO

3.动态 framework

静态库直接链接到程序文件中,动态库就可以分开单独的文件,并且可选择的链接加载,如果不是刚启动就加载可以降低启动时间。

动态库加载方式

链接选项设置 require 或者 option

如果没有设置可以用 dlopen 的方式动态加载

NSString *documentsPath = [NSString stringWithFormat:@"%@/Documents/Dylib.framework/Dylib",NSHomeDirectory()];

[self dlopenLoadDylibWithPath:documentsPath];

- (void)dlopenLoadDylibWithPath:(NSString *)path

{

libHandle = NULL;

libHandle = dlopen([path cStringUsingEncoding:NSUTF8StringEncoding], RTLD_NOW); if (libHandle == NULL) { char *error = dlerror(); NSLog(@"dlopen error: %s", error);

} else { NSLog(@"dlopen load framework success.");

}

}

使用NSBundle的方式来加载

NSString *documentsPath = [NSString stringWithFormat:@"%@/Documents/Dylib.framework",NSHomeDirectory()];

[self bundleLoadDylibWithPath:documentsPath];

}

- (void)bundleLoadDylibWithPath:(NSString *)path

{

_libPath = path; NSError *err = nil; NSBundle *bundle = [NSBundle bundleWithPath:path]; if ([bundle loadAndReturnError:&err]) { NSLog(@"bundle load framework success.");

} else { NSLog(@"bundle load framework err:%@",err);

}

4.链接选项

-all_load 链接所有文件,不管是否会调用里面的符号

-force_load 对指定的库,链接所有文件

-ObjC 如果文件里面有OC代码,就链接这个文件

Perform Single-Object PreLink 这个选项是对库工程设置的,如果启用这个选项,所有的对象文件都会被合并成一个单文件

-whyload 编译日志中会记录那个文件因为什么原因而加载。但是它只会打印第一个被认为是“使用中”的符号。

IOS库开发知识点总结和归纳

-dead_strip 这个选项会移除那些虽然和文件一起加载了,但是没有没用的代码和数据。

Dead strip对于C代码能很好的工作(例如:像预期的那样去掉没用的函数、变量和常量),它在C++上也能工作的不错(例如:没用的类能够被移除)。虽然它并不完美,在一些情况下一些符号没有被移除,但是在大多数情况下它能在这些语言下很好地工作。

5.NSBundle 相关

根据类名得到 bundle

NSBundle *bundle = [NSBundle bundleForClass:[DemoViewController class]];

根据路径得到

NSString *path = [[NSBundle mainBundle] pathForResource:@"xx" ofType:@"framework" inDirectory:@"Frameworks"]; NSBundle *bundle = [NSBundle bundleWithPath:path];

多语言

NSBundle* englishBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]];

NSString* englishTranslation = [englishBundle localizedStringForKey:translation_key value:@"" table:nil];

en_GB.lproj/

en_US.lproj/

en.lproj/

对于多语言资源的查找,遵循下面的逻辑

- 先查找 语言+地区 - 然后 语言 - 最后 公共

6.相关命令

lipo 用来查询库的编译对应平台,以及整合多个版本的库文件到一个库文件

nm 查询库文件的符号文件

7.打包

使用方式如下

./package.sh AFrameWorkTarget framework

./package.sh ALIBTarget

预约申请免费试听课

上一篇:IOS开发工具大全,帮助你提高IOS开发效率的工具
下一篇:IOS开发程序员必知,检测IOSAPP性能的一些方法

IOS库开发知识点总结和归纳

IOS Swift实战开发经验总结,IOSSwift开发经验分享

IOS设计 - 一款APP从设计稿到切图过程概述

2017年IOS开发者账号申请以及邓白氏码的申请教程经验

选择城市和中心
贵州省

广西省

海南省