Objective-C类的构造函数和析构函数

 构造函数:java

Objective-C是一门面向对象的语言,咱们在Objective-C中定义一个类时,总要提供一个初始化方法,通常你们都是这样写的:objective-c

- (id)init {  
    //调用父类方法,实例一个本类,涉及runtime,防止冲突,能够在构造方法里初始化一些数据等  
    self = [super init];  
    if (self) {  
        self.name = @"xxx";  
    }  
    return self;  
}

- (id)initWithString:(NSString *)aString
{ 
    [self init];
    self.name = aString;   
} 
  
- (id)initWithImage:(UIImage *)aImage
{ 
    [self init];
    self.image = aImage;   
}

这样一段简单的代码,却有不少能够思考的问题:  编程

一、为何要经过[super init]来调用父类的初始化方法,父类的初始化方法里又执行了什么东西?框架

首先,咱们知道对象继承的概念,一个子类从父类继承,那么也要实现父类的全部功能,这就是is-a的关系,好比说狗是哺乳动物,那么狗一定具备哺乳动物的特征和功能。因此在子类的初始化方法中,必须首先调用父类的初始化方法,以实现父类相关资源的初始化。例如咱们在初始化狗这一对象时,必须先初始化哺乳动物这一对象,并把结果赋予狗,以使狗知足属于哺乳动物这一特征。函数

典型的,在iOS下,全部的类都继承于NSObject,而NSObject的init方法很简单,就是return self。当父类的初始化完成以后,即self不为nil的状况下,就能够开始作子类的初始化了。spa

 

在面向对象编程中,若是编写一个类而没有包含构造函数,这个类仍能编译而且彻底能够正常使用。若是类没有提供显式的构造函数,编译器会提供一个默认的构造函数给你。除了建立对象自己,默认构造函数的惟一工做就是调用其超类的构造函数。在不少状况下,这个超类是语言框架的一部分,如java中的 Object类,objective-c 中的NSObject类。代理

不管是何种状况,在类中至少包含一个构造函数是一种很好的编程实践,若是类中有属性,好的实践每每是初始化这些属性。code

 

析构函数 对象

析构函数dealloc,对象从内存中销毁前夕调用的函数blog

- (void)dealloc  
{  
    //析构函数是在对象彻底销毁的时候自动调用  
    //对象销毁的时候调用 计数器 retainCount = 0  
    //dealloc 不能够人为调用  
    //在dealloc里清除成员变量,代理,监听等  
    self.color = nil;  
    self.linePoints = nil;  
    [super dealloc];  
}
相关文章
相关标签/搜索