liangtong


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

  • 搜索

Swift Deinitialization

发表于 2016-11-28 | 分类于 iOS | 阅读次数:

​ 析构器只适用于类类型,当一个类的实例被释放之前,析构器会被立即调用。析构器用关键字deinit来标示。

析构过程

Swift 会自动释放不再需要的实例以释放资源。通过自动引用计数(ARC)处理实例的内存管理。通常当你的实例被释放时不需要手动地去清理。但是,当使用自己的资源时,你可能需要进行一些额外的清理。例如,如果创建了一个自定义的类来打开一个文件,并写入一些数据,你可能需要在类实例被释放之前手动去关闭该文件。

在类的定义中,每个类最多只能有一个析构器,而且析构器不带任何参数,如下所示:

1
2
3
deinit {
// perform the deinitialization
}

析构器是在实例释放发生前被自动调用。你不能主动调用析构器。子类继承了父类的析构器,并且在子类析构器实现的最后,父类的析构器会被自动调用。即使子类没有提供自己的析构器,父类的析构器也同样会被调用。

阅读全文 »

Swift Initialization

发表于 2016-11-27 | 分类于 iOS | 阅读次数:

​ 构造过程是使用类、结构体、枚举的实例之前的准备过程。具体操作包括设置实例中每个存储型属性的初始值和执行其他必须的设置或初始化工作。在新实例可用前必须执行这个过程。
通过定义构造器来实现构造过程,这些构造器可以看做是用来创建特定类型新实例的特殊方法。与 Objective-C 中的构造器不同,Swift 的构造器无需返回值,它们的主要任务是保证新实例在第一次使用前完成正确的初始化。
类的实例也可以通过定义析构器在实例释放之前执行特定的清除工作。

存储属性的初始化值

类和结构体在创建实例时,必须为所有存储型属性设置合适的初始值。存储型属性的值不能处于一个未知的状态。你可以在构造器中为存储型属性赋初值,也可以在定义属性时为其设置默认值。
为存储型属性设置默认值或者在构造器中为其赋值时,它们的值是被直接设置的,不会触发任何属性观察者。

阅读全文 »

Swift Inheritance

发表于 2016-11-26 | 分类于 iOS | 阅读次数:

​ 一个类可以继承另一个类的方法,属性和其它特性。当一个类继承其它类时,继承类叫子类,被继承类叫超类(或父类)。在 Swift 中,继承是区分「类」与其它类型的一个基本特征。
在 Swift 中,类可以调用和访问超类的方法,属性和下标,并且可以重写这些方法,属性和下标来优化或修改它们的行为。Swift 会检查你的重写定义在超类中是否有匹配的定义,以此确保你的重写行为是正确的。
可以为类中继承来的属性添加属性观察器,这样一来,当属性值改变时,类就会被通知到。可以为任何属性添加属性观察器,无论它原本被定义为存储型属性还是计算型属性。

基类

不继承于其它类的类,称之为基类。
Swift 中的类并不是从一个通用的基类继承而来。如果你不为你定义的类指定一个超类的话,这个类就自动成为基类。

下面的例子定义了一个叫Vehicle的基类。包含一个currentSpeed存储属性,一个description的只读计算属性,一个makeNoise方法,方法什么都不做,子类会重写该方法。

1
2
3
4
5
6
7
8
9
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) miles per hour"
}
func makeNoise() {
// do nothing - an arbitrary vehicle doesn't necessarily make a noise
}
}
阅读全文 »
1…131415…20
liangtong

liangtong

Keep hungry keep foolish!

59 日志
7 分类
17 标签
GitHub E-Mail 微博 知乎
友情链接
  • lidm1989
© 2016 — 2018 liangtong
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4