面试底层分享(二)

什么是库?
现有的、成熟的可以复用的代码,程序代码的集合,共享程序代码的一种方式。

库的分类
根据程序代码的开源情况,库可以分为两类:1、 开源库 2 、闭源库
开源库可看见代码实现。如gitHub上的AFN和SDWebImage。
闭源库只公开调用的接口看不到具体的实现,编译后的二进制文件。
闭源库进一步可分为两类:静态库动态库。又称静态链接方式动态链接方式

iOS静态库与动态库的区别?
静态库:链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。
动态库:链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,多个程序共用,节省内存

如何将程序编译成可执行文件?

屏幕快照 2019-06-17 下午4.09.12.png

通过命令查看可执行文件
打开终端
clang
clang的帮助命令为man clang 来查看clang的相关语法
clang -ccc-print-phases main.m
即可查看bianyicheng可执行文件的步骤。
如下图:

屏幕快照 2019-06-17 下午4.15.09.png

换言之:源代码->预处理器->编译器->汇编->机器码->链接->可执行文件

静态库与动态库打包
静态库.a文件

屏幕快照 2019-06-17 下午4.24.27.png

屏幕快照 2019-06-17 下午4.27.10.png

注意:红色表示没有生成静态库
command+B 编译
如图所示:生成成功
屏幕快照 2019-06-17 下午4.29.41.png

如何查询静态库是否支持模拟器或真机?
lipo -info

静态库framework文件

屏幕快照 2019-06-17 下午6.01.53.png

注意:红色表示没有生成静态库
屏幕快照 2019-06-17 下午6.03.35.png

command+B 编译
如图所示:生成成功
屏幕快照 2019-06-18 上午10.52.06.png

动态库framework生成
动态库framework生成与静态库唯一的区别在于 BuildSettings里的mach动态库默认为Dynamic Library 生成静态库时需要修改
再者应用动态库framework 与静态库framework的区别,如下图

image.png

注意:swift只支持动态库

内存优化
检测内存优化的一般方法:
1、静态检测方法
2、动态监测方法instruments
3、dealloc
4、第三方自动监测库

如何解决和检查内存问题?
1、野指针

屏幕快照 2019-06-18 下午1.14.36.png

一般来说EXC_BAD_ACCESS是野指针引起的崩溃,但具体定位不到准确的位置。
定位具体代码步骤如下:
屏幕快照 2019-06-18 下午1.16.44.png

屏幕快照 2019-06-18 下午1.17.21.png

看控制台左右地址数据定位问题所在:
屏幕快照 2019-06-18 下午1.19.47.png

引申:assign与weak都是弱引用声明类型,最大区别在哪?
weak声明的变量对象释放后自动清空,赋值为nil。
assign声明的变量对象释放后不会自动赋值为nil,会造成野指针错误。
2、内存泄漏问题
检测内存泄漏的一般方法:
1、静态检测方法:手动和自动(循环引用问题使用静态分析方法无法检测出来)
1)自动检测快捷键:command+shift+b 或者如下图
i

2)自动检测方法:
项目是否需要开启请酌情处理 , 开启方式如下:
i

2、动态监测方法instruments
开启instrument的方法有很多,如长按运行按钮、product->profile->leaks->choose、Xcode->open developer tool->instruments。用时自行选择开启方式。
运行-> 定位:如图所示(循环引用问题)
image.png

3、析构方法打印看调没调用
当某个对象引用计数为0时,自动调用dealloc方法
4、第三方内存检测工具
pod 'MLeaksFinder','~>1.0.0' (基于runtime的检测机制)

runtime基本用法
1、用runtime改变变量值
案例:改变persion类里的name属性值

屏幕快照 2019-06-18 下午2.32.32.png

屏幕快照 2019-06-18 下午2.30.53.png

屏幕快照 2019-06-18 下午2.29.59.png

2、使用runtime交换方法
屏幕快照 2019-06-18 下午2.36.20.png

屏幕快照 2019-06-18 下午3.06.47.png

3、使用runtime添加方法
屏幕快照 2019-06-18 下午3.13.36.png

屏幕快照 2019-06-18 下午3.14.04.png

最后的调用测试:
屏幕快照 2019-06-18 下午3.16.53.png

4、使用runtime给分类拓展属性
创建分类
屏幕快照 2019-06-18 下午3.25.19.png

屏幕快照 2019-06-18 下午3.26.03.png

屏幕快照 2019-06-18 下午3.27.37.png

编译时没有问题
屏幕快照 2019-06-18 下午3.38.27.png

访问时崩溃报错
屏幕快照 2019-06-18 下午3.39.30.png

使用runtime给分类拓展属性
屏幕快照 2019-06-18 下午3.42.51.png

swift简单运用
给一个数组,要求用swift写一个函数,交换数组中的两个元素

屏幕快照 2019-06-18 下午4.09.09.png

屏幕快照 2019-06-18 下午4.08.44.png

屏幕快照 2019-06-18 下午4.11.12.png

这段代码有什么问题?
屏幕快照 2019-06-18 下午4.13.54.png

————导致循环引用————
解决办法
屏幕快照 2019-06-18 下午4.26.30.png

使用swift实现一个函数,输入是任一整数,输出要返回输入的整数+2
这道题使用了swift的柯里化特性。
柯里化:是指从一个多参数函数变成一连串单参数函数的变换。

屏幕快照 2019-06-18 下午4.49.21.png

简化下面代码
屏幕快照 2019-06-18 下午5.04.06.png

两种方式简化:

屏幕快照 2019-06-18 下午5.15.29.png

这段代码打印出来会是什么?

屏幕快照 2019-06-18 下午5.17.18.png

打印结果:
屏幕快照 2019-06-18 下午5.19.49.png

屏幕快照 2019-06-18 下午5.20.33.png

打印结果:


屏幕快照 2019-06-18 下午5.21.04.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,682评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,277评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,083评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,763评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,785评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,624评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,358评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,261评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,722评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,900评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,030评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,737评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,360评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,941评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,057评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,237评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,976评论 2 355

推荐阅读更多精彩内容