美文网首页面试题iOS KitiOS底层
面试技术攻克-iOS开发基础

面试技术攻克-iOS开发基础

作者: iOS大蝠 | 来源:发表于2019-10-30 15:13 被阅读0次

    一、开发环境

    1、什么是LLVM和Clang?

    LLVM 全称 Low Level Virtual Machine ,底层虚拟机,
    宏观:LLVM不仅是一个编译器或者虚拟机,它是一个众多编译器工具及低级工具技术的统称,包含一个前端、优化器、后端以及众多函数库和模板。
    微观:可以看做后端编译器,前端编译器为Clang。

    Clang是一个有C++编写的编译器前端,能够编译C、C++、Objc等高级语言,属于LLVM的一部分。主要用于词法分析、语法分析、语义分析、生成中间代码。


    IMG_2028.JPG

    2、Clang与GCC有什么区别?

    (1)Clang比Gcc编译用时更短
    (2)Clang比Gcc占用内存更小
    (3)Clang生成的中间产物比Gcc更小
    (4)Clang错误提示比Gcc更友好
    (5)Clang有静态分析,Gcc没有
    (6)Clang从开始就被设计为API,允许代码分析工具和IDE集成
    (7)Gcc比Clang支持更多语言和平台

    3、Clang如何使用?

    Clang功能非常强大,可以通过Clang观察到编译器运行的几个阶段:
    (1)词法分析
    (2)语法分析
    (3)生成抽象语法树(AST)
    (4)生成中间代码(IR)
    (5)编译器优化
    (6)生成目标文件
    (7)运行目标文件
    经常使用Clang将Objc代码转化成C++代码:

    clang -rewrite-objc main.m//将oc->c++
    

    4、Xcode项目中target和scheme的区别是什么?

    target包含了所有的源文件,决定编译那些文件,一个project可以包含一个或者多个target。
    scheme定义了一个target集合,决定运行和构建哪个target。

    5、CocoaPods的工作原理是什么?

    (1)通过建立podfile文件,指定第三方库
    (2)使用pod install安装框架
    (3)第三方框架被编译为libpods.a的静态库,主项目依赖这个静态库

    二、常用框架

    1、Cocoa,Foundation和UIKit的区别是什么?

    Cocoa是一个框架集合,包含了众多子框架,其中最核心的两个框架就是Foundation和UIKit。
    Foundation是最常用的基础框架,包含了数据类型,枚举,结构体等所有与UI界面没有直接关系的类,这些类的根类为NSObject,所以使用“NS”作为前缀。
    UIKit是简历在Foundation框架上的,用于界面绘制和管理界面的框架,提供一系列的类来管理用户界面、事件捕捉、图形绘制、屏幕触碰等接口。使用“UI”作为前缀。


    IMG_2029.JPG

    2、Cocoa,Foundation和UIKit的区别是什么?

    Foundation是最常用的基础框架,包含了,数据类型、枚举、结构体等与UI无关的类,常见类:NSString,NSArray。。。是由Objective-C实现的。
    Core Foundation是从Foundation框架派生出来的,由C语言实现的框架。常见类:CFString,CFArray。。。
    两套框架具有相同的功能,提供了两套接口,只是实现语言不一样。两者之间可以通过 __bridge,__bridge_transfer,__bridge_retain等关键字来转换桥接。
    为什么有两套。主要是为了易于实现跨平台开发和支持开发国际化。

    三、其他

    1、什么是懒加载(lazy loading)?

    懒加载有成为“延迟加载”,核心思想就是把对象的实例化延迟到真正调用该对象时进行,好处是减轻大量对象在实例化时对资源的消耗,而不是在程序初始化时就预先将对象实例化。另外,懒加载可以将实例化代码从初始化函数中独立出来,提高代码可读性,以便于代码更好的被组织。

    2、iOS中动态库和静态库的区别是什么?

    (1)存在形式上:静态库已.a或者.framework为文件后缀,动态库以.dylib或者.framework为文件后缀。
    (2)使用区别上:静态库链接时,被完整的复制到可执行文件中,动态库链接时,不复制,程序运行时由系统动态加载到内存,供程序调用,当多个程序共同调用时,只加载一次,以节省内存开销。

    相关文章

      网友评论

        本文标题:面试技术攻克-iOS开发基础

        本文链接:https://www.haomeiwen.com/subject/cypovctx.html