GeekBand.Swift-第一周作业

2016/5/8 posted in  iOS学习笔记  

请为以下四种类型设计方式画出类型的内存模型。分析每种设计方案的优缺点,选出你认为最佳的实现方式,并解释为什么?
心中有沟壑
原谅我。。英语拼错了。。。

设计方式一

class Point{
    var x:Int;
    var y:Int;
}
class  Rectangle{
    var leftUp:Point;
    var width:Int;
    var height:Int;
}

内存模型:
设计模式一内存模型

设计方式二

struct Point{
    var x:Int;
    var y:Int;
}
 
class Rectangle{
    var leftUp:Point;
    var width:Int;
    var height:Int;
}

内存模型:
设计方式二

设计方式三

class Point{
    var x:Int;
    var y:Int;
}
 
struct  Rectangle{
    var leftUp:Point;
    var width:Int;
    var height:Int;
}

内存模型:
设计方式三

设计方式四

struct Point{
    var x:Int;
    var y:Int;
} 
struct Rectangle{
    var leftUp:Point;
    var width:Int;
    var height:Int;
}

内存模型:
设计方式四

Swift中struct和class的区别

WWDC2014 Introduction to Swift有比较清楚的介绍,总结区别主要有两点:

  1. struct没有继承的功能,而class是可以继承的,这是面向对象语言的核心能力,class当然会有这个能力
  2. 体现在内存使用上,struct是通过值传递,数据保存在栈上。而class是通过引用传递的,数据保存在堆中。

使用情景

当满足以下条件的时候,建议使用struct,否则建议使用class

  1. 封装少量、简单的数据的时候。比如题目中的Point。
  2. 数值在传递的过程中应使用值拷贝的情况。比如Frame,Point的实现。
  3. 不需要继承。这个是面向对象的基本特性。

结论

综上所示,个人认为四种设计方式按照设计良好来排序应为(在具体实际情况下可能有所改变):2>1>4>3