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 对象
  • 相关阅读:
    求最大子数组02
    求最大子数组
    第3周学习进度
    四则运算3
    第2周学习进度
    构建之法阅读笔记02
    四则运算2及单元测试
    四则运算1
    第1周学习进度
    构建之法阅读笔记01
  • 原文地址:https://www.cnblogs.com/edensyd/p/11278116.html
Copyright © 2011-2022 走看看