iOS 面试-第三方库相关
- pod update 和 pod install 的区别
- 动态库和静态库的区别
- Git 常用的命令
- URL Schema 和 Universal Link
- -ObjC, -all_load, -force_load 区别
pod update 和 pod install 的区别
pod install 用于工程第一次安装 pod 库和修改 podfile(添加,更新,移除 pod 库)的时候。
pod update 用于更新特定的 pod(或所有的 pod)版本时。
更详细可以参考:pod install vs. pod update
动态库和静态库的区别
动态库形式:.dylib 和 .framework 静态库形式:.a 和 .framework
.a 和 .framework 的区别 .a 是单纯的二进制文件,.framework 是二进制文件+资源文件。 其中 .a 不能直接使用,需要 .h 文件配合,而 .framework 则可以直接使用。 .framework = .a + .h + sorrceFile(资源文件)
静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝
系统动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存
自定义动态库(Embedded Framework):在我们自己应用的 .app 目录里面,只能自己的 App Extension 和 APP 使用。
Git 常用的命令
- 1.
git init
初始化一个 Git 仓库。 - 2.
git add <file>
添加文件 - 3.
git status
查看当前 Git 仓库的文件状态。 - 4.
git diff
查看一个文件前后有什么不同。 - 5.
git commit -m '描述信息'
提交文件及相关信息。 - 6.
git checkout -- <file>...
:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改。 - 7.
git log
命令显示从最近到最远的提交日志(可以回到过去)。 - 8.
git reset --hard HEAD^
回退到上一个版本。 - 9.
git reset --hard 1094a
如果是错误回退,只要当前窗口还没有关闭,可以找到最新的commit id
,根据commit id
还原。 - 10.
git reflog
可以用来记录你的每一次命令,即便是误操作,可以通过这个命令进行还原(也就是可以回到未来)。 - 11.
git checkout
是切换分支的意思。 - 12.
git reset HEAD <file>
可以把暂存区的修改撤销掉(unstage) - 13.
git remote add origin 远程仓库地址
将本地仓库与远程仓库关联 - 14.
git push -u origin master
会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来. - 15.
git merge xxx
合并指定分支到当前分支 - 16.
git branch
查看当前的所有分支。 - 17.
git branch xxx
创建指定的分支。
URL Schema 和 Universal Link
URL Schema: 跳转的时候会出现提示框,“是够打开XX”,用户体验不好。
微信屏蔽 URL Schema,必须是出现在白名单里面才可以跳转(意味着用户无法在微信里面一键直达 APP)
通用链接的优点:
安全性:当用户安装应用程序,iOS 会检查您已经上传到 web 服务器文件,
以确保您的网站允许你的应用程序能打开代表它的 URL 文件,
只要你创建并且上传该文件,那么你的应用和服务器之间的关联是安全的。
灵活性:当你的应用程序没有被安装的时候,通用链接照样能够工作。
当用户没有安装你的应用程序,点击该链接,将会以用户所期望的以 Safari 的形式访问
私有性:其他的应用程序可以和你的应用程序进行通信,不管你的应用是否被安装。
简单性:通用链接既能支持你的网站,又能支持你的应用。
独特性:与自定义的 URL 链接相比,通用链接不能被其他的应用程序所访问,
因为它们使用的是标准的 HTTP 或 HTTPS 链接到你的网站。
-ObjC, -all_load, -force_load 区别
-ObjC:
这个 flag 告诉链接器把静态库库中定义的 Objective-C 类和 Category 都加载进来。
这样编译之后的 app 会变大(因为加载了其他的 objc 代码进来)。
但是如果静态库中有类和 Category 的话只有加入这个 flag 才行。
-all_load 和 -force_load:
这个 flag 是专门处理 -ObjC 的一个 bug 的。
用了 -ObjC 以后,如果类库中只有 category 没有类的时候这些 category 还是加载不进来。
变通方法就是加入 -all_load 或者 -force-load。
-all_load 会强制链接器把目标文件都加载进来,即使没有 objc 代码。
-force_load 在 xcode3.2 后可用。但是 -force_load 后面必须跟一个只想静态库的路径。