objective-C学习笔记(五)函数成员:初始化器和析构器

初始化器:init

    对象初始化器: -(id)init 可以重载多个。

    类型初始化器: +(id)initialize只能有一个。

对象初始化器:

      初始化对象实例时,init通常和alloc(手动内存分配)搭配使用。

  alloc所做的事情——NSObject已实现。

      ·在堆上分配合适大小的内存。

      ·将属性或者实例变量的内存置0。

  init所做的事情——可以自定义:

      ·调用父类初始化器[super init](前置调用)

      ·初始化当前对象的实例变量(注意是实例变量,不是属性)

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

       ·Book* book = [Book new];

 类初始化器:一般用的很少

      比如说类里有一个全局的静态变量,就需要在类初始化的时候赋个初值。

      initialize在每个类使用之前被系统自动调用,且只调用一次(每个进程周期)。

      子类的initialize会自动调用父类的initialize(前置调用)。

 析构器:dealloc (也叫释放器) 

       释放对象所拥有的资源,无返回值的函数。

       只有对象析构器,没有类型析构器。

  自动实现:1.ARC将对象属性引用计数减持。

  手动实现:2. 释放不受ARC管理的动态内存,如malloc分配的内存。

  手动实现:3. 关闭非内存资源,如文件句柄,网络接口。。。

  dealloc由ARC根据对象引用计数规则,在释放对象内存前自动调用,无法手动调用。

  子类的dealloc会自动调用父类的dealloc(后置调用)。

 

posted @ 2016-03-23 22:15  dom075  阅读(153)  评论(0编辑  收藏  举报