5 初始化器和析構器

初始化器

這裏寫圖片描述

對象初始化器

這裏寫圖片描述

//init方法是有返回值的,而且有時候返回值會是另一個對象。因此,如果alloc與init分開寫時,需要對變量重新賦值。

CustomClass c1 = [[CustomClass alloc] init];

CustomClass c1 = [CustomClass alloc];
c1 = [c1 init];
// 保險起見,init中要對self進行判定,因爲可能會是nil.
// 而且一般都要先[super init];調用父類初始化器。
// 初始化器內部最好都使用實例變量而不要用屬性。
-(id)initWithName:(NSString *)name {
    self = [super init];
    if (self) {
        NSLog(@"Book Object init");

        _name = [name copy];
        _pages = pages;
        _category = [category copy];
    }
    return self;
}
// 通常有多個初始化器時,都只會完整的編寫最多參數的初始化器。然後其他初始化器其實都是便捷初始化器,直接通過默認參數的形式來調用主初始化器。
-(id)init {
    return [self initWithName:@"Default"];
}
// new只能調用默認的初始化器,無法調用自定義初始化器。它不能傳遞參數。

類型初始化器

這裏寫圖片描述

//類初始化器一般固定寫法。
+(void)initialize {
    if(self ==[Custom class]){
        NSLog(@"Book Class initialize");
    }
}

析構器

這裏寫圖片描述

-(void)dealloc {
    //1. 自動調用:ARC 對對象屬性的引用技術減持
    //2. 手工實現
    NSLog(@"Book Object release");
    //3. 自動調用:父類dealloc
}
發佈了35 篇原創文章 · 獲贊 9 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章