知识卡片
析构函数只属于引用类型
内容
只有类能定义 deinit,结构体和枚举没有析构函数,这不是语法上的随意限制,而是由 [[类和结构体的根本分野是值语义与引用语义]] 决定的:值类型的一份数据可能同时存在于好几个变量里、随时被复制,”这份数据什么时候彻底消失”本身就是个模糊问题;类的每个实例只有一份,靠自动引用计数器追踪,当最后一个引用它的地方也不再持有它时,这个时刻是明确唯一的,析构函数才有意义在这个时刻被自动调用一次,用来做文件句柄关闭、资源归还这类”实例消失前必须收尾”的工作。析构函数不能手动调用、不接受参数,因为它的触发时机完全由引用计数机制决定,而非业务代码决定。
参考来源
《Swift全解析:新式iOS实战开发》第16章《Swift析构》