美文网首页
初始化器与析构器

初始化器与析构器

作者: 羊妞麻麻 | 来源:发表于2016-05-09 20:08 被阅读27次

初始化器用于初始化对象实例或者类型,是一个特殊的函数
对象初始化器:-(id) init 可以重载多个 返回值是id
类型初始化器:+(void)initialize 只能有一个 返回值void

析构器用于释放对象拥有的资源,无返回值的函数
对象析构器 -(void)dealloc 只能有一个 无参数
没有类型析构器

对象初始化器
初始化对象实例时,init通常和alloc搭配使用。
alloc所做的事情-NSObject已实现 类方法返回一个指针
*在堆上分配合适的大小内存
*将属性或者实例变量的内存置0

init所做的事情-可以自定义:
*调用父类初始化器【super init】前置条件(必写) 有返回值id

-(id)init
{
//1.先调用父类的初始化方法
 self = [super init];
//2.判断是否为空
    if(self){
//3.初始化实例变量
self.name//在初始化内部不要使用属性
_name = [name copy];

   }
return self;
}

*初始化当前对象实例变量 (注意使用实例变量,不要使用属性)

new相当于调用alloc/init的无参数版本

Book *b2 = [Book new];//先alloc 再init 区别是new不能传参数
Book *b2 = [Book alloc] initwithName:@"wu"];//可以传参数

类初始化器
类初始化器initialize负责类型级别的初始化

+(void)initialize
{
//self 就是当前类的类型表示
   if(self == [Book class])
   {

   }
}

initialize在每个类使用之前被系统自动调用,且每个进程周期中,只能被调用一次。
子类的initialize会自动调用父类的initialize 前置调用

对象析构器
对象析构器dealloc负责释放对象拥有的动态资源:
自动实现:1.ARC将对象属性引用计数减持
手动实现:2.释放不受ARC管理的动态内存,如malloc分配的内存
手动实现:3.关闭非内存资源,如文件句柄 网络端口

-(void)dealloc
{
   // 1.自动调用:ARC将对象属性引用计数减持
   //2.手动调用:手动释放 关闭非内存资源,如文件句柄 网络端口
  NSLog(@"Book is release")
   //3.自动调用:父类的dealloc
}

dealloc由ARC根据对象的引用计数规则,在释放对象内存前自动调用,无法手工调用。
子类的dealloc会自动调用父类的dealloc (后置调用)

相关文章

  • GeekBand OC 5. 初始化器与析构器

    初始化器(初始化) 对象初始化器:-(id) 类型初始化器:+(void) 析构器(释放) 对象析构器:-(voi...

  • 《Swift从入门到精通》(十三):反初始化(析构过程)

    反初始化(析构过程)类实例销毁之前会立即调用析构器,用关键字 deinit 反初始化(析构过程)如何工作Swift...

  • swift3语法(十二)

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

  • 【GeekBand】objective-c basic1

    类与对象 数据成员 函数成员 TODO: 初始化器和析构器继承多态 类与对象 Objective-C(以下简称OC...

  • 初始化器与析构器

    初始化器用于初始化对象实例或者类型,是一个特殊的函数对象初始化器:-(id) init 可以重载多个 返回值是id...

  • swift之析构过程与自动引用计数

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

  • Swift 4.2基础---析构器

    在释放类实例之前立即调用析构器。使用deinit关键字编写析构器,类似于使用init关键字编写构造器。析构器只在c...

  • Swift 4.0 编程语言(六)

    126.析构器 在一个类实例销毁前,一个析构器会立即调用。使用deinit 关键字来表示析构器, 跟构造器写法类似...

  • Swift - 析构过程

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

  • 13-Swift析构过程(Deinitialization)

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

网友评论

      本文标题:初始化器与析构器

      本文链接:https://www.haomeiwen.com/subject/buperttx.html