美文网首页
2022-09-23爱回收

2022-09-23爱回收

作者: 浪呀么浪打浪 | 来源:发表于2022-11-23 16:00 被阅读0次

    一面

    【1、class与static修饰类的 时候】

    static修饰存储属性、计算属性、类型方法,且修饰的方法不能被继承

    class修饰计算属性、类方法,修饰的方法可以继承

    final修饰的类、方法、变量是不能被继承或重写的,且通过它可以显示的指定函数的派发机制

    在protocol中使用static来修饰类型域上的方法或者计算属性,因为struct、enum、class都支持static,而struct和enum不支持class

    【2、defer什么时候调用?多个defer呢?】

    defer语句:用来定义任何方式(抛错误、return等)离开代码块前必须要执行的代码

    defer语句将延迟至当前作用域结束之前执行

    defer语句的执行顺序与定义顺序相反

    【3、map、flatmap、com pactmap】

    map函数:map映射,将一个元素根据某个函数 映射 成另一个元素(可以是同类型,也可以是不同类型)。map 方法获取一个闭包表达式作为其唯一参数。 数组中的每一个元素调用一次该闭包函数,并返回该元素所映射的值。简单说就是数组中每个元素通过某个方法进行转换,最后返回一个新的数组。

    flatMap函数:flatMap 方法同 map 方法比较类似,只不过它返回后的数组中不存在 nil(自动把 nil 给剔除掉),同时它会把 Optional 解包。flatmap可以将元素映射成可选类型。

    filter 过滤,将一个元素传入闭包中,如果返回的是false , 就过滤掉

    reduce先映射后融合,将数组中的所有元素映射融合在一起

    【4、throw 和rethrows】

    【5、runloop与线程?如何添加常驻线程】

    【6、afn,最大并发数为什么是1】

    最大并发数是1 的优点:

    1),所有的网络请求和网络相应都在同一个线程,不是每个请求都新建一个线程,节约资源。

    2),并发数是1,能够保证处理请求的正确顺序。

    一 常驻线程:

    1、2.0 需要常驻线程的作用?

    2.0常驻线程,用来并发请求,和处理数据回调;避免多个网络请求的线程开销(不用开辟一个线程,就保活一条线程);

    2、而3.0不需要常驻线程?

    因为NSURLSession可以指定回调delegateQueue,NSURLConnection而不行;

    NSURLConnection的一大痛点就是:发起请求后,而需要一直处于等待回调的状态。而3.0后NSURLSession解决的这个问题;NSURLSession发起的请求,不再需要在当前线程进行回调,可以指定回调的delegateQueue,这样就不用为了等待代理回调方法而保活线程了。

    二 最大并发数:

    1 、3.0需要设置最大并发数为1,self.operationQueue.maxConcurrentOperationCount = 1?

    串行:让并发的请求,串行的进行回调;

    锁:且为了防止多线程资源竞争加了锁(对 self.mutableTaskDelegatesKeyedByTaskIdentifier(多任务代理) 的访问进行了加锁),本来就需要等待,如果多线程并发反而造成资源浪费;

    2、2.0为什么不需要?

    功能不一样:AF3.0的operationQueue是用来接收NSURLSessionDelegate回调的,鉴于一些多线程数据访问的安全性考虑,设置了maxConcurrentOperationCount = 1来达到串行回调的效果。

    而AF2.0的operationQueue是用来添加operation并进行并发请求的,所以不要设置为1。

    【7、组件化命令pod spec lint 与pod lib lint】

    pod lib lint:进行私有库本地验证

     pod spec lint:进行私有库远端验证

    【8、podfile 中user_framework有什么用】

    【9、动态库与静态库的区别?】

    https://www.jianshu.com/p/4301a6f3e426

    静态库:(静态链接库)(.a)在编译时会将库copy一份到目标程序中,编译完成之后,目标程序不依赖外部的库,也可以运行 缺点:会使应用程序变大。动态库:(.dylib)编译时只存储了指向动态库的引用。可以多个程序指向这个库,在运行时才加载,不会使应用体积变大,但是运行时加载会损耗部分性能,并且依赖外部的环境,如果库不存在或者版本不正确则无法运行Framework:实际上是一种打包方式,将库的二进制文件,头文件和有关的资源文件打包到一起,方便管理和分发。

    use_frameworks!

    1、用cocoapods 导入swift 框架 到 swift项目和OC项目都必须要 use_frameworks!

    2、使用 dynamic frameworks,必须要在Podfile文件中添加 use_frameworks!

    (1)如果在Podfile文件里 *不使用* use_frameworks! 则是会生成相应的 .a文件(静态链接库),通过 static libraries 这个方式来管理pod的代码。

    (2)Linked:libPods-xxx.a包含了其它用pod导入的第三方框架的.a文件。

    (3)如果使用了use_frameworks! 则cocoapods 会生成相应的 .frameworks文件(动态链接库:实际内容为 Header + 动态链接库 + 资源文件),使用 dynamic frameworks 来取代 static libraries 方式。(4)Linked:Pods_xxx.framework包含了其它用pod导入的第三方框架的.framework文件。

    【10、UIView与clayer区别?clayer树的层级有哪些】

    1).UIView 是 iOS 系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由 CoreAnimation 来实现的。它真正的绘图部分,是由一个 CALayer 类来管理。 UIView 本身更像是一个 CALayer 的管理器,访问它的跟绘图和跟坐标有关的属性。

    2).UIView 有个重要属性 layer ,可以返回它的主 CALayer 实例。

    3).UIView 的 CALayer 类似 UIView 的子 View 树形结构,也可以向它的 layer 上添加子layer ,来完成某些特殊的表示。即 CALayer 层是可以嵌套的。

    4).UIView 的 layer 树形在系统内部,被维护着三份 copy 。分别是逻辑树,这里是代码可以操纵的;动画树,是一个中间层,系统就在这一层上更改属性,进行各种渲染操作;显示树,其内容就是当前正被显示在屏幕上得内容。

    5).动画的运作:对 UIView 的 subLayer (非主 Layer )属性进行更改,系统将自动进行动画生成,动画持续时间的缺省值似乎是 0.5 秒。

    6).坐标系统: CALayer 的坐标系统比 UIView 多了一个 anchorPoint 属性,使用CGPoint 结构表示,值域是 0~1 ,是个比例值。这个点是各种图形变换的坐标原点,同时会更改 layer 的 position 的位置,它的缺省值是 {0.5,0.5} ,即在 layer 的中央。

    7).渲染:当更新层,改变不能立即显示在屏幕上。当所有的层都准备好时,可以调用setNeedsDisplay 方法来重绘显示。

    8).变换:要在一个层中添加一个 3D 或仿射变换,可以分别设置层的 transform 或affineTransform 属性。

    9).变形: Quartz Core 的渲染能力,使二维图像可以被自由操纵,就好像是三维的。图像可以在一个三维坐标系中以任意角度被旋转,缩放和倾斜。 CATransform3D 的一套方法提供了一些魔术般的变换效果。

    【realm、fmdb、coredata区别?为什么选择realm,优缺点】

    realm:

    FMDB:

    (coredata)

    【沙盒机制】

    持久化在Document目录下,一般存储非机密数据。当App中涉及到电子书阅读、听音乐、看视频、刷图片列表等时,推荐使用沙盒存储。因为这可以极大的节约用户流量,而且也增强了app的体验效果.

    Application:存放程序源文件,上架前经过数字签名,上架后不可修改

    Documents: 保存应运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录。

    tmp: 保存应运行时所需的临时数据,使⽤完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录

    Library/Caches: 保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据,比如网络数据缓存存储到Caches下。

    Library/Preference: 保存应用的所有偏好设置,如iOS的Settings(设置) 应会在该目录中查找应⽤的设置信息。iTunes同步设备时会备份该目录

    【swift的映射机制】

    反射:是指可以动态获取类型、成员信息,在运行时可以调用方法、属性等行为的特性。

    我们已经知道,对于一个纯swift类来说,并不支持直接像OC runtime那样的操作;但是swift标准库依旧提供了反射机制,用来访问成员信息,即Mirror。

    相关文章

      网友评论

          本文标题:2022-09-23爱回收

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