zoukankan      html  css  js  c++  java
  • swift面试题

    一、open与public的区别

    • public:可以别任何人访问,但是不可以被其他module复写和继承。
    • open:可以被任何人访问,可以被继承和复写。

    二、struct与class 的区别

    • struct是值类型,class是引用类型

      • 值类型的变量直接包含它们的数据,对于值类型都有它们自己的数据副本,因此对一个变量操作不可能影响另一个变量。
      • 引用类型的变量存储对他们的数据引用,因此后者称为对象,因此对一个变量操作可能影响另一个变量所引用的对象。
      • 二者的本质区别:struct是深拷贝,拷贝的是内容;class是浅拷贝,拷贝的是指针
    • property的初始化不同:class 在初始化时不能直接把 property 放在 默认的constructor 的参数里,而是需要自己创建一个带参数的constructor;而struct可以,把属性放在默认的constructor 的参数里。
    • 变量赋值方式不同:struct是值拷贝;class是引用拷贝。
    • immutable变量:swift的可变内容和不可变内容用var和let来甄别,如果初始为let的变量再去修改会发生编译错误。struct遵循这一特性;class不存在这样的问题
    • mutating function: struct 和 class 的差別是 struct 的 function 要去改变 property 的值的时候要加上 mutating,而 class 不用。
    • 继承: struct不可以继承,class可以继承。
    • struct比class更轻量:struct分配在栈中,class分配在堆中。

    三、swift把struct作为数据模型

    3.1优点

    1. 安全性: 因为 Struct 是用值类型传递的,它们没有引用计数。
    2. 内存: 由于他们没有引用数,他们不会因为循环引用导致内存泄漏。
    3. 速度: 值类型通常来说是以栈的形式分配的,而不是用堆。因此他们比 Class 要快很多!
    4. 拷贝:Objective-C 里拷贝一个对象,你必须选用正确的拷贝类型(深拷贝、浅拷贝),而值类型的拷贝则非常轻松!
    5. 线程安全: 值类型是自动线程安全的。无论你从哪个线程去访问你的 Struct ,都非常简单。

    3.2 缺点

    1. Objective-C与swift混合开发:OC调用的swift代码必须继承于NSObject。
    2. 继承:struct不能相互继承。
    3. NSUserDefaults:Struct 不能被序列化成 NSData 对象
  • 相关阅读:
    9、Spring Boot 2.x 集成 Thymeleaf
    【专题】Spring Boot 2.x 面试题
    8、Spring Boot 2.x 服务器部署
    7、Spring Boot 2.x 集成 Redis
    6、Spring Boot 2.x 集成 MyBatis
    5、Spring Boot 2.x 启动原理解析
    4、Spring Boot 2.x 自动配置原理
    3、Spring Boot 2.x 核心技术
    2、Spring Boot 2.x 快速入门
    centOS下安装JDK1.8.60,glassfish4.1.1以及MySQL
  • 原文地址:https://www.cnblogs.com/edensyd/p/11278116.html
Copyright © 2011-2022 走看看