析构方法 deinit

/*

析构方法:

对象的内存被回收前被隐式调用的方法, 对应OC的dealloc方法

主要执行一些额外操作, 例如释放一些持有资源, 关闭文件, 断开网络等

*/

class FileHandle {

var fd:Int32? // 文件描述符

//指定构造器

init(path:String) {

//需要打开的文件路径, 打开方式(只读)

//open方法是UNIX的方法

let ret = open(path, O_RDONLY)

if ret == -1 {

fd = nil

}else{

fd = ret

}

print("对象被创建")

}

//析构方法

deinit {

//关闭文件

if let ofd = fd {

close(ofd)

}

print("对象被销毁")

}

}

var fh:FileHandle? = FileHandle(path: "/Users/hanjunqiang/Desktop/StudyEveryDay/H5/第一阶段/小说.html") //测试地址, 换成你自己路径地址文件即可

fh = nil

/*

析构方法的自动继承

父类的析构方法会被自动调用, 不需要子类管理

*/

class Person {

var name:String

init(name:String) {

self.name = name

print("Person init")

}

deinit {

print("Person deinit")

}

}

class SuperMan: Person {

var age:Int

init(age:Int) {

self.age = age

super.init(name: "hjq")

}

deinit {

//如果父类的析构方法不会被自动调用, 那么我们还需要关心父类

//但是如果这样做对子类是比较苦逼的

print("SuperMan deinit")

}

}

var sm:SuperMan? = SuperMan(age: 25)

sm = nil

时间: 2024-10-24 09:45:03

析构方法 deinit的相关文章

【Swift学习】Swift编程之旅---析构方法(十九)

在一个类的实例内存被释放之前,析构方法被立即调用.使用deinit关键字来声明析构方法,类似于构造方法用init来声明.析构方法只适用于类类型. 析构方法原理 Swift会自动释放不再需要的实例以释放资源.如自动引用计数那一章描述,Swift通过自动引用计数(ARC)处理实例的内存管理.不需要手动的去清理.但是,当使用自己的资源时,你可能需要进行一些额外的清理.例如,如果创建了一个自定义的类来打开一个文件,并写入一些数据,你可能需要在类实例被释放之前关闭该文件. 在类的定义中,每个类最多只能有一

构造方法与析构方法区别

Java构造方法 类有一个特殊的成员方法叫作构造方法,它的作用是创建对象并初始化成员变量.在创建对象时,会自动调用类的构造方法.构造方法定义规则:Java 中的构造方法必须与该类具有相同的名字,并且没有方法的返回类型(包括没有void).另外,构造方法一般都应用 public 类型来说明,这样才能在程序任意的位置创建类的实例也就是对象.示例:下面是一个 Rectangle 类的构造方法,一个是带有两个参数,分别表示矩形的长和宽: 另一个是不带参数:public class Rectangle {

知识点:构造和析构方法 __new__ , __init__ , __del__

1:__new__ 类创建对象的一个执行的方法,一般不需要重写这个函数.当继承的类是不可变,但是又想修改该对象. 基本语法  def __new__(cls ,[args,]]) ####写一个将字母全部大写的类#### class Capstr(str): def __new__(cls , string): string = string.upper() return str.__new__(cls , string) print(Capstr("marian")) ####写一个

PHP之析构方法学习笔记

__destruct() 当对象被销毁时候,系统内部会自动调用该方法. 分三类:   1.当php代码 声明周期执行完毕结束后: 会自动调用该方法 2.当对象被unset()后 :系统会自动调用该方法 3.当对象被重新赋值后 :系统会自动调用该方法 1 class Test{ 2 3 public function __destruct(){ 4 5 echo "对象被销毁之后,执行的代码"; 6 } 7 } 8 9 $test = new Test(); 10 11 unset($t

类的构造方法和析构方法和封装的目的和封装的做法+访问修饰符

一.封装的目的:为了让类更安全. 封装的做法: ①类里面的成员变量做为private ②使用成员方法来间接访问成员变量 ③在该方法里面加限制条件 注意:PHP类里面不允许出现同名方法. 二.访问修饰符 ①public:代表公有的,在任何地方都可以访问. ②protected:代表受保护的,只能在该类或该类的子类中访问. ③private:代表私有的,只能在该类中访问. 三.类的构造方法注意事项 ①构造方法名可以和类相同,也可以使用__construct();提倡时候后者. ②构造方法没有返回值.

PHP抽象接口析构方法

/*class Ren{ public static $color; static function Show() { Ren::$color;//用类名不仅可以调用自己的,还可以调用其他类的Car::$name self::$color;//用self只能调用该类 }}class Car{ public static $name;}*///抽象类 关键词abstract/*abstract class DongWu{ public $dong; public $jiao; function C

0607am抽象类&接口&析构方法&tostring&小知识点

/*class ren{ public static $color;//静态 static function () { ren::$color; self::$color;//self只能写在类里面,代表这分类 }} */ //不能实例化的类:抽象类abstract class Animal //关键字abstract{ public $dong; public $jiao; function chi() { } function shui() { }}class Ren extends Ani

PHP面相对象:构造方法与析构方法

一.构造方法 构造方法也称“构造器”,是对象创建完成后,第一个自动调用的方法,他的作用是初始化成员属性. 二.析构方法 当对象被垃圾回收器释放之前最后一个被自动调用的时候,他一般用于关闭一些资源,做一些清理的工作. 1 class Person { 2 var $age; 3 var $name; 4 var $sex; 5 6 function Person($name = "", $sex = "男", $age = 0) { 7 $this->name

python面向对象析构方法-----> __del__方法

1.什么时候用法析构方法. 在对象资源被释放的时候触发. 2.使用场景. 帮助清理资源,比如python解释器清理不掉的资源. 例子: class Foo: def __init__(self,x): self.x=x def __del__(self): #在对象资源被释放时触发 print('现在是__del__执行') f=Foo(100000) del f #这个步骤在释放资源,这个时候会触发函数中的__del__函数中定义的方法. print('====================