傲骨天成科技 发表于 2022-3-1 20:11:25

swift面试题

一.Swift和OC的区别?


[*]1.swift是静态语言,有类型推断,OC是动态语言。
[*]2.swift面向协议编程,OC面向对象编程
[*]3.swift注重值类型,OC注重引用类型。
[*]4.swift支持泛型,OC只支持轻量泛型
[*]5.swift支持静态派发(效率高)、动态派发(函数表派发、消息派发)方式,OC支持动态派发(消息派发)方式。
[*]6.swift支持函数式编程
[*]7.swift的协议不仅可以被类实现,也可以被struct和enum实现
[*]8.swift有元组类型、支持运算符重载
[*]9.swift支持命名空间
[*]10.swift支持默认参数
[*]11.swift比oc代码更加简洁
二、swift的派发机制


[*]1.函数的派发机制:静态派发(直接派发)、函数表派发、消息派发
[*]2.swift派发机制总结:
**1.swift中所有值类型:struct、enum使用直接派发。
**2.swift中协议的extensions(类似于OC的分类)使用直接派发,初始声明函数使用函数表派发
**3.swift中class中extensions使用直接派发,初始化声明函数使用函数表派发,dynamic修饰的函数使用消息派发。
**4.swift中NSObject的子类用@nonobjc或final修饰的函数使用直接派发,初始声明函数使用函数表派发,dynamic修饰的extensions使用消息派发
[*]3.swift中函数派发查看方式:可将swift代码转换为SIL(中间码)
swiftc -emit-silgen -O example.swift三、swift显示指定派发方式?


[*]1.添加final关键字的函数使用直接派发
[*]2.添加static关键字函数使用直接派发
[*]3.添加dynamic关键字函数使用消息派发
[*]4.添加@objc关键字的函数使用消息派发
[*]5.添加@inline关键字的函数告诉编译器可以使用直接派发
四、Struct和Class区别?


[*]1.Struct不支持继承、Class支持继承
[*]2.Struct是值类型,Class是引用类型
[*]3.Struct无法修改自身属性值,函数需要添加mutating关键字
[*]4.Struct初始化方法是基于属性的
[*]5.Struct不需要deinit方法,因为值类型不关心引用计数,Class需要deinit方法。
五、Swift中的常量和OC中的常量有啥区别?

OC中的常量(const)是编译期决定的,Swift中的常量(let)是运行时确定的
六、swift中mutating的作用?

    swift中协议是可以被Struct和enum实现的,mutating关键字是为了能在被修饰的函数中修改struct或enum的变量值。对Class完全透明。七、final关键词的用法

final关键词的作用:它修饰的类、方法、变量是不能被继承或重写的,编译器会报错。它可以显示的指派函数的派发机制。八、lazy关键词的用法

lazy关键词的作用:指定延迟加载(懒加载),懒加载存储属性只会在首次使用时才会计算初始值属性。 lazy修饰的属性非线程安全的。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: swift面试题