swift的一些面试题

图片描述

1、open与public的区别

  • public:能够别任何人访问,可是不能够被其余module复写和继承。
  • open:能够被任何人访问,能够被继承和复写。

2、struct与class 的区别

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

    • 值类型的变量直接包含它们的数据,对于值类型都有它们本身的数据副本,所以对一个变量操做不可能影响另外一个变量。
    • 引用类型的变量存储对他们的数据引用,所以后者称为对象,所以对一个变量操做可能影响另外一个变量所引用的对象。
    • 两者的本质区别: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分配在堆中。

3、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 对象。

参考文章

Swift 浅谈Struct与Classswift

相关文章
相关标签/搜索